MyFileAspect.java 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package jnpf.aop;
  2. import jnpf.config.ConfigValueUtil;
  3. import jnpf.constant.MsgCode;
  4. import jnpf.exception.DataException;
  5. import jnpf.util.PdfUtil;
  6. import jnpf.util.XSSEscape;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.dromara.x.file.storage.core.FileInfo;
  9. import org.dromara.x.file.storage.core.UploadPretreatment;
  10. import org.dromara.x.file.storage.core.aspect.*;
  11. import org.dromara.x.file.storage.core.platform.FileStorage;
  12. import org.dromara.x.file.storage.core.recorder.FileRecorder;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Component;
  15. import java.io.IOException;
  16. import java.io.InputStream;
  17. import java.util.function.Consumer;
  18. @Slf4j
  19. @Component
  20. public class MyFileAspect implements FileStorageAspect {
  21. @Autowired
  22. private ConfigValueUtil configValueUtil;
  23. @Override
  24. public FileInfo uploadAround(UploadAspectChain chain, FileInfo fileInfo, UploadPretreatment pre, FileStorage fileStorage, FileRecorder fileRecorder) {
  25. checkFilePath(fileInfo);
  26. if(configValueUtil.isCheckFilePdf()) {
  27. try {
  28. String ext = fileInfo.getExt();
  29. if("pdf".equalsIgnoreCase(ext)) {
  30. log.error("检测PDF文件");
  31. if (PdfUtil.containsJavaScript(pre.getFileWrapper().getInputStream())) {
  32. throw new DataException(MsgCode.FA053.get());
  33. }
  34. }
  35. } catch (IOException e) {
  36. log.error("PDF文档解析失败: {}", e.getMessage());
  37. }
  38. }
  39. return FileStorageAspect.super.uploadAround(chain, fileInfo, pre, fileStorage, fileRecorder);
  40. }
  41. @Override
  42. public boolean deleteAround(DeleteAspectChain chain, FileInfo fileInfo, FileStorage fileStorage, FileRecorder fileRecorder) {
  43. checkFilePath(fileInfo);
  44. return FileStorageAspect.super.deleteAround(chain, fileInfo, fileStorage, fileRecorder);
  45. }
  46. @Override
  47. public boolean existsAround(ExistsAspectChain chain, FileInfo fileInfo, FileStorage fileStorage) {
  48. checkFilePath(fileInfo);
  49. return FileStorageAspect.super.existsAround(chain, fileInfo, fileStorage);
  50. }
  51. @Override
  52. public void downloadAround(DownloadAspectChain chain, FileInfo fileInfo, FileStorage fileStorage, Consumer<InputStream> consumer) {
  53. checkFilePath(fileInfo);
  54. FileStorageAspect.super.downloadAround(chain, fileInfo, fileStorage, consumer);
  55. }
  56. @Override
  57. public void downloadThAround(DownloadThAspectChain chain, FileInfo fileInfo, FileStorage fileStorage, Consumer<InputStream> consumer) {
  58. checkFilePath(fileInfo);
  59. FileStorageAspect.super.downloadThAround(chain, fileInfo, fileStorage, consumer);
  60. }
  61. private void checkFilePath(FileInfo fileInfo){
  62. //处理特殊文件名
  63. fileInfo.setPath(XSSEscape.escapePath(fileInfo.getPath()));
  64. fileInfo.setFilename(XSSEscape.escapePath(fileInfo.getFilename()));
  65. }
  66. }