commit
5c38a79e19
@ -25,6 +25,8 @@ import com.qiwenshare.ufop.util.UFOPUtils;
|
|||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@ -36,6 +38,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -146,7 +149,7 @@ public class FiletransferController {
|
|||||||
|
|
||||||
@Operation(summary="预览文件", description="用于文件预览", tags = {"filetransfer"})
|
@Operation(summary="预览文件", description="用于文件预览", tags = {"filetransfer"})
|
||||||
@GetMapping("/preview")
|
@GetMapping("/preview")
|
||||||
public void preview(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, PreviewDTO previewDTO){
|
public void preview(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, PreviewDTO previewDTO) throws IOException {
|
||||||
|
|
||||||
if (previewDTO.getPlatform() != null && previewDTO.getPlatform() == 2) {
|
if (previewDTO.getPlatform() != null && previewDTO.getPlatform() == 2) {
|
||||||
filetransferService.previewPictureFile(httpServletResponse, previewDTO);
|
filetransferService.previewPictureFile(httpServletResponse, previewDTO);
|
||||||
@ -176,18 +179,6 @@ public class FiletransferController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FileBean fileBean = fileService.getById(userFile.getFileId());
|
|
||||||
|
|
||||||
String mime= MimeUtils.getMime(userFile.getExtendName());
|
|
||||||
httpServletResponse.setHeader("Content-Type", mime);
|
|
||||||
String rangeString = httpServletRequest.getHeader("Range");//如果是video标签发起的请求就不会为null
|
|
||||||
if (StringUtils.isNotEmpty(rangeString)) {
|
|
||||||
long range = Long.valueOf(rangeString.substring(rangeString.indexOf("=") + 1, rangeString.indexOf("-")));
|
|
||||||
httpServletResponse.setContentLength(Math.toIntExact(fileBean.getFileSize()));
|
|
||||||
httpServletResponse.setHeader("Content-Range", String.valueOf(range + (Math.toIntExact(fileBean.getFileSize()) - 1)));
|
|
||||||
}
|
|
||||||
httpServletResponse.setHeader("Accept-Ranges", "bytes");
|
|
||||||
|
|
||||||
String fileName = userFile.getFileName() + "." + userFile.getExtendName();
|
String fileName = userFile.getFileName() + "." + userFile.getExtendName();
|
||||||
try {
|
try {
|
||||||
fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");
|
fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");
|
||||||
@ -197,7 +188,44 @@ public class FiletransferController {
|
|||||||
|
|
||||||
httpServletResponse.addHeader("Content-Disposition", "fileName=" + fileName);// 设置文件名
|
httpServletResponse.addHeader("Content-Disposition", "fileName=" + fileName);// 设置文件名
|
||||||
|
|
||||||
filetransferService.previewFile(httpServletResponse, previewDTO);
|
FileBean fileBean = fileService.getById(userFile.getFileId());
|
||||||
|
if (UFOPUtils.isVideoFile(userFile.getExtendName()) && !"true".equals(previewDTO.getIsMin())) {
|
||||||
|
Downloader downloader = ufopFactory.getDownloader(fileBean.getStorageType());
|
||||||
|
DownloadFile downloadFile = new DownloadFile();
|
||||||
|
downloadFile.setFileUrl(fileBean.getFileUrl());
|
||||||
|
InputStream inputStream = downloader.getInputStream(downloadFile);
|
||||||
|
|
||||||
|
|
||||||
|
String mime = MimeUtils.getMime(userFile.getExtendName());
|
||||||
|
httpServletResponse.setHeader("Content-Type", mime);
|
||||||
|
|
||||||
|
//获取从那个字节开始读取文件
|
||||||
|
String rangeString = httpServletRequest.getHeader("Range");
|
||||||
|
int range = 0;
|
||||||
|
if (StringUtils.isNotBlank(rangeString)) {
|
||||||
|
range = Integer.valueOf(rangeString.substring(rangeString.indexOf("=") + 1, rangeString.indexOf("-")));
|
||||||
|
}
|
||||||
|
//获取响应的输出流
|
||||||
|
OutputStream outputStream = httpServletResponse.getOutputStream();
|
||||||
|
//返回码需要为206,代表只处理了部分请求,响应了部分数据
|
||||||
|
httpServletResponse.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
|
||||||
|
// 每次请求只返回1MB的视频流
|
||||||
|
byte[] bytes = new byte[1024 * 1024 * 5];
|
||||||
|
System.out.println("文件长度:" + inputStream.available());
|
||||||
|
System.out.println("range:" + range);
|
||||||
|
inputStream.skip(range);
|
||||||
|
int len = IOUtils.read(inputStream, bytes);
|
||||||
|
//设置此次相应返回的数据长度
|
||||||
|
httpServletResponse.setContentLength(len);
|
||||||
|
httpServletResponse.setHeader("Accept-Ranges", "bytes");
|
||||||
|
//设置此次相应返回的数据范围
|
||||||
|
httpServletResponse.setHeader("Content-Range", "bytes " + range + "-" + (fileBean.getFileSize() - 1) + "/" + fileBean.getFileSize());
|
||||||
|
// 将这1MB的视频流响应给客户端
|
||||||
|
outputStream.write(bytes, 0, len);
|
||||||
|
outputStream.close();
|
||||||
|
} else {
|
||||||
|
filetransferService.previewFile(httpServletResponse, previewDTO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user