| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package jnpf.aop;
- import jnpf.config.ConfigValueUtil;
- import jnpf.constant.MsgCode;
- import jnpf.exception.DataException;
- import jnpf.util.PdfUtil;
- import jnpf.util.XSSEscape;
- import lombok.extern.slf4j.Slf4j;
- import org.dromara.x.file.storage.core.FileInfo;
- import org.dromara.x.file.storage.core.UploadPretreatment;
- import org.dromara.x.file.storage.core.aspect.*;
- import org.dromara.x.file.storage.core.platform.FileStorage;
- import org.dromara.x.file.storage.core.recorder.FileRecorder;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.function.Consumer;
- @Slf4j
- @Component
- public class MyFileAspect implements FileStorageAspect {
- @Autowired
- private ConfigValueUtil configValueUtil;
- @Override
- public FileInfo uploadAround(UploadAspectChain chain, FileInfo fileInfo, UploadPretreatment pre, FileStorage fileStorage, FileRecorder fileRecorder) {
- checkFilePath(fileInfo);
- if(configValueUtil.isCheckFilePdf()) {
- try {
- String ext = fileInfo.getExt();
- if("pdf".equalsIgnoreCase(ext)) {
- log.error("检测PDF文件");
- if (PdfUtil.containsJavaScript(pre.getFileWrapper().getInputStream())) {
- throw new DataException(MsgCode.FA053.get());
- }
- }
- } catch (IOException e) {
- log.error("PDF文档解析失败: {}", e.getMessage());
- }
- }
- return FileStorageAspect.super.uploadAround(chain, fileInfo, pre, fileStorage, fileRecorder);
- }
- @Override
- public boolean deleteAround(DeleteAspectChain chain, FileInfo fileInfo, FileStorage fileStorage, FileRecorder fileRecorder) {
- checkFilePath(fileInfo);
- return FileStorageAspect.super.deleteAround(chain, fileInfo, fileStorage, fileRecorder);
- }
- @Override
- public boolean existsAround(ExistsAspectChain chain, FileInfo fileInfo, FileStorage fileStorage) {
- checkFilePath(fileInfo);
- return FileStorageAspect.super.existsAround(chain, fileInfo, fileStorage);
- }
- @Override
- public void downloadAround(DownloadAspectChain chain, FileInfo fileInfo, FileStorage fileStorage, Consumer<InputStream> consumer) {
- checkFilePath(fileInfo);
- FileStorageAspect.super.downloadAround(chain, fileInfo, fileStorage, consumer);
- }
- @Override
- public void downloadThAround(DownloadThAspectChain chain, FileInfo fileInfo, FileStorage fileStorage, Consumer<InputStream> consumer) {
- checkFilePath(fileInfo);
- FileStorageAspect.super.downloadThAround(chain, fileInfo, fileStorage, consumer);
- }
- private void checkFilePath(FileInfo fileInfo){
- //处理特殊文件名
- fileInfo.setPath(XSSEscape.escapePath(fileInfo.getPath()));
- fileInfo.setFilename(XSSEscape.escapePath(fileInfo.getFilename()));
- }
- }
|