|
|
|
@ -255,67 +255,91 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ApiOperation("文件预览")
|
|
|
|
|
public Result preview(Long fileId, HttpServletResponse response) {
|
|
|
|
|
public void preview(Long fileId, HttpServletResponse response) {
|
|
|
|
|
try {
|
|
|
|
|
// 获取文件路径
|
|
|
|
|
String filePath = businessDataFileMapper.getPath(fileId);
|
|
|
|
|
if (filePath == null || filePath.isEmpty()) {
|
|
|
|
|
return Result.error("文件不存在");
|
|
|
|
|
response.setContentType("application/json; charset=UTF-8");
|
|
|
|
|
response.getWriter().write("{\"status\":500,\"msg\":\"文件不存在\"}");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
File file = new File(filePath);
|
|
|
|
|
if (!file.exists()) {
|
|
|
|
|
return Result.error("文件不存在");
|
|
|
|
|
response.setContentType("application/json; charset=UTF-8");
|
|
|
|
|
response.getWriter().write("{\"status\":500,\"msg\":\"文件不存在\"}");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取文件扩展名
|
|
|
|
|
String extension = getFileExtension(filePath);
|
|
|
|
|
// ... 后续 switch 语句
|
|
|
|
|
|
|
|
|
|
// 根据文件类型处理预览
|
|
|
|
|
switch (extension) {
|
|
|
|
|
case "pdf":
|
|
|
|
|
return previewPdf(file, response);
|
|
|
|
|
previewPdf(file, response);
|
|
|
|
|
break;
|
|
|
|
|
case "jpg":
|
|
|
|
|
case "jpeg":
|
|
|
|
|
case "png":
|
|
|
|
|
case "gif":
|
|
|
|
|
case "bmp":
|
|
|
|
|
case "webp":
|
|
|
|
|
return previewImage(file, response);
|
|
|
|
|
previewImage(file, response);
|
|
|
|
|
break;
|
|
|
|
|
case "txt":
|
|
|
|
|
case "md":
|
|
|
|
|
case "log":
|
|
|
|
|
return previewText(file, response);
|
|
|
|
|
previewText(file, response);
|
|
|
|
|
break;
|
|
|
|
|
case "doc":
|
|
|
|
|
case "docx":
|
|
|
|
|
case "xls":
|
|
|
|
|
case "xlsx":
|
|
|
|
|
case "ppt":
|
|
|
|
|
case "pptx":
|
|
|
|
|
return previewOffice(file, response);
|
|
|
|
|
previewOffice(file, response);
|
|
|
|
|
break;
|
|
|
|
|
case "mp4":
|
|
|
|
|
case "avi":
|
|
|
|
|
case "mov":
|
|
|
|
|
case "wmv":
|
|
|
|
|
case "flv":
|
|
|
|
|
return previewVideo(file, response);
|
|
|
|
|
previewVideo(file, response);
|
|
|
|
|
break;
|
|
|
|
|
case "mp3":
|
|
|
|
|
case "wav":
|
|
|
|
|
case "flac":
|
|
|
|
|
case "aac":
|
|
|
|
|
return previewAudio(file, response);
|
|
|
|
|
previewAudio(file, response);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
return Result.error("暂不支持该文件类型的预览");
|
|
|
|
|
try {
|
|
|
|
|
response.setContentType("application/json; charset=UTF-8");
|
|
|
|
|
response.getWriter().write("{\"status\":500,\"msg\":\"暂不支持该文件类型的预览\"}");
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return Result.error("文件预览失败: " + e.getMessage());
|
|
|
|
|
try {
|
|
|
|
|
response.setContentType("application/json; charset=UTF-8");
|
|
|
|
|
response.getWriter().write("{\"status\":500,\"msg\":\"文件预览失败: " + e.getMessage() + "\"}");
|
|
|
|
|
} catch (IOException ex) {
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getFileExtension(String fileName) {
|
|
|
|
|
if (fileName == null || fileName.isEmpty()) {
|
|
|
|
|
private String getFileExtension(String filePath) {
|
|
|
|
|
if (filePath == null || filePath.isEmpty()) {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
// 从路径中提取文件名
|
|
|
|
|
String fileName = new File(filePath).getName();
|
|
|
|
|
int lastDotIndex = fileName.lastIndexOf('.');
|
|
|
|
|
if (lastDotIndex == -1) {
|
|
|
|
|
return "";
|
|
|
|
@ -323,10 +347,10 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService {
|
|
|
|
|
return fileName.substring(lastDotIndex + 1).toLowerCase();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Result previewPdf(File file, HttpServletResponse response) {
|
|
|
|
|
private void previewPdf(File file, HttpServletResponse response) {
|
|
|
|
|
try {
|
|
|
|
|
response.setContentType("application/pdf");
|
|
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
|
|
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
|
|
|
|
|
|
|
|
|
|
try (FileInputStream fis = new FileInputStream(file);
|
|
|
|
|
OutputStream os = response.getOutputStream()) {
|
|
|
|
@ -336,17 +360,21 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService {
|
|
|
|
|
os.write(buffer, 0, bytesRead);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Result.ok("PDF预览成功");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return Result.error("PDF预览失败: " + e.getMessage());
|
|
|
|
|
try {
|
|
|
|
|
response.setContentType("application/json; charset=UTF-8");
|
|
|
|
|
response.getWriter().write("{\"status\":500,\"msg\":\"PDF预览失败: " + e.getMessage() + "\"}");
|
|
|
|
|
} catch (IOException ex) {
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Result previewImage(File file, HttpServletResponse response) {
|
|
|
|
|
private void previewImage(File file, HttpServletResponse response) {
|
|
|
|
|
try {
|
|
|
|
|
String contentType = getImageContentType(file.getName());
|
|
|
|
|
response.setContentType(contentType);
|
|
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
|
|
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
|
|
|
|
|
|
|
|
|
|
try (FileInputStream fis = new FileInputStream(file);
|
|
|
|
|
OutputStream os = response.getOutputStream()) {
|
|
|
|
@ -356,16 +384,20 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService {
|
|
|
|
|
os.write(buffer, 0, bytesRead);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Result.ok("图片预览成功");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return Result.error("图片预览失败: " + e.getMessage());
|
|
|
|
|
try {
|
|
|
|
|
response.setContentType("application/json; charset=UTF-8");
|
|
|
|
|
response.getWriter().write("{\"status\":500,\"msg\":\"图片预览失败: " + e.getMessage() + "\"}");
|
|
|
|
|
} catch (IOException ex) {
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Result previewText(File file, HttpServletResponse response) {
|
|
|
|
|
private void previewText(File file, HttpServletResponse response) {
|
|
|
|
|
try {
|
|
|
|
|
response.setContentType("text/plain; charset=UTF-8");
|
|
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
|
|
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
|
|
|
|
|
|
|
|
|
|
try (FileInputStream fis = new FileInputStream(file);
|
|
|
|
|
OutputStream os = response.getOutputStream()) {
|
|
|
|
@ -375,22 +407,30 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService {
|
|
|
|
|
os.write(buffer, 0, bytesRead);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Result.ok("文本预览成功");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return Result.error("文本预览失败: " + e.getMessage());
|
|
|
|
|
try {
|
|
|
|
|
response.setContentType("application/json; charset=UTF-8");
|
|
|
|
|
response.getWriter().write("{\"status\":500,\"msg\":\"文本预览失败: " + e.getMessage() + "\"}");
|
|
|
|
|
} catch (IOException ex) {
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Result previewOffice(File file, HttpServletResponse response) {
|
|
|
|
|
// Office文件预览比较复杂,这里返回提示信息
|
|
|
|
|
return Result.error("Office文件预览功能暂未实现,请下载后查看");
|
|
|
|
|
private void previewOffice(File file, HttpServletResponse response) {
|
|
|
|
|
try {
|
|
|
|
|
response.setContentType("application/json; charset=UTF-8");
|
|
|
|
|
response.getWriter().write("{\"status\":500,\"msg\":\"Office文件预览功能暂未实现,请下载后查看\"}");
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Result previewVideo(File file, HttpServletResponse response) {
|
|
|
|
|
private void previewVideo(File file, HttpServletResponse response) {
|
|
|
|
|
try {
|
|
|
|
|
String contentType = getVideoContentType(file.getName());
|
|
|
|
|
response.setContentType(contentType);
|
|
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
|
|
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
|
|
|
|
|
|
|
|
|
|
try (FileInputStream fis = new FileInputStream(file);
|
|
|
|
|
OutputStream os = response.getOutputStream()) {
|
|
|
|
@ -400,17 +440,21 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService {
|
|
|
|
|
os.write(buffer, 0, bytesRead);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Result.ok("视频预览成功");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return Result.error("视频预览失败: " + e.getMessage());
|
|
|
|
|
try {
|
|
|
|
|
response.setContentType("application/json; charset=UTF-8");
|
|
|
|
|
response.getWriter().write("{\"status\":500,\"msg\":\"视频预览失败: " + e.getMessage() + "\"}");
|
|
|
|
|
} catch (IOException ex) {
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Result previewAudio(File file, HttpServletResponse response) {
|
|
|
|
|
private void previewAudio(File file, HttpServletResponse response) {
|
|
|
|
|
try {
|
|
|
|
|
String contentType = getAudioContentType(file.getName());
|
|
|
|
|
response.setContentType(contentType);
|
|
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
|
|
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
|
|
|
|
|
|
|
|
|
|
try (FileInputStream fis = new FileInputStream(file);
|
|
|
|
|
OutputStream os = response.getOutputStream()) {
|
|
|
|
@ -420,9 +464,13 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService {
|
|
|
|
|
os.write(buffer, 0, bytesRead);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Result.ok("音频预览成功");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return Result.error("音频预览失败: " + e.getMessage());
|
|
|
|
|
try {
|
|
|
|
|
response.setContentType("application/json; charset=UTF-8");
|
|
|
|
|
response.getWriter().write("{\"status\":500,\"msg\":\"音频预览失败: " + e.getMessage() + "\"}");
|
|
|
|
|
} catch (IOException ex) {
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|