0
点赞
收藏
分享

微信扫一扫

最近工作中遇到的4个问题(2019-09-20),附件上传 支持多个,上传文件时,需要手动创建目录,Fastdfs上传文件,注意文件名前后有空格的情况

雪域迷影 2023-05-05 阅读 57


1、上传文件时,需要手动创建目录

通常,系统临时目录"/tmp"是已经存在的。但是,如果自己增加了2级目录,比如"/tmp/oaAttachment",需要手动创建。

奇葩的是,Apache Commons FileUtils创建目录,竟然是force开头,按说默认应该是“mkDir”之类的方法名才对。

String saveDir = SystemUtil.get( SystemUtil.TMPDIR)+File.separator+"oaAttachment";
 //linux出现了,目录不会自动创建
 FileUtils.forceMkdir(new File(saveDir));

 

2、Fastdfs上传文件,注意文件名前后有空格的情况。

public String uploadFile(MultipartFile file) throws IOException {
log.info("FileClient->uploadFile,file={}",file);
 StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(),
 FilenameUtils.getExtension(StringUtils.trim(file.getOriginalFilename())), null);
 return getResAccessUrl(storePath);
 } 
FilenameUtils.getExtension(StringUtils.trim(file.getOriginalFilename())).

 

然后又遇到1个奇怪的问题:

System.out.println(StringUtils.trim(" oa-all-table.sql "));

代码里直接加“ ” trim起作用。

但是,Windows桌面直接给某个文件加空格,程序里 trim不起作用,特殊问题啊,先不管了。

养成trim的好习惯。

3、Fastdfs Nginx配置,下载文件名 支持中文

server {
     listen 8888;
    server_name localhost;
    location /group1/M00 {
         ngx_fastdfs_module;         if ($arg_filename ~* \.(doc|docx|txt|pdf|zip|rar|png|jpg|jpeg|gif|xls|xlsx)$) {
               add_header Content-Disposition "attachment;filename=$arg_filename";
           }
    }   }
 }

遇到一点问题,还需要再研究下。

http://192.1611111:8888/group1/M00/00/03/wKii612C7kCAOnN6AAADbj6wPdQ768.txt?filename=124.png

 

4、附件上传 支持多个。

SpringMVC很容易支持,但是 Swagger文档不太方便,网上也没有找到靠谱的答案。

最终是通过postman,按ctrl键 一次性选择多个。

后端代码:

ApiOperation(value = "上传附件", notes = "")
@PostMapping("upload")
@ApiImplicitParams(value = { @ApiImplicitParam(name = "contractId",value="合同id",required=true),
@ApiImplicitParam(name = "file",value="文件",dataType="__file")
})
public Result<Boolean> upload(@RequestParam Integer contractId,@RequestParam MultipartFile file){
log.info("ContractAttachmentController->upload,contractId={}",contractId);
try {
String url = fileClient.uploadFile(file);
String name=file.getOriginalFilename();
Long fileSize= file.getSize();
Boolean succeed = contractAttachmentService.save(contractId,url,name,fileSize);
return ResultUtils.succeed(succeed);
} catch (IOException e) {
e.printStackTrace();
return ResultUtils.error(ResultEnums.FASTDFS_UPLOAD_ERROR);
}
//String url=fileClient.uploadFile("abc", ".txt");
}
 
@ApiOperation(value = "上传附件-支持多个-自测中哎", notes = "")
@PostMapping("uploadMulti")
@ApiImplicitParams(value = { @ApiImplicitParam(name = "contractId",value="合同id",required=true),
@ApiImplicitParam(name = "files",value="文件",dataType="__file",allowMultiple = true)
})
public Result<Boolean> uploadMulti(@RequestParam Integer contractId,@RequestParam MultipartFile[] files){
log.info("ContractAttachmentController->upload,contractId={}",contractId);
try {
Boolean succeed = false;
for(MultipartFile file:files){
//上传,从单个改为多个
String url = fileClient.uploadFile(file);
String name=file.getOriginalFilename();
Long fileSize= file.getSize();
succeed = contractAttachmentService.save(contractId,url,name,fileSize);
}
return ResultUtils.succeed(succeed);
} catch (IOException e) {
e.printStackTrace();
return ResultUtils.error(ResultEnums.FASTDFS_UPLOAD_ERROR);
}
//String url=fileClient.uploadFile("abc", ".txt");
}

举报

相关推荐

0 条评论