解决 java.io.IOException: Directory ‘/CDDY_uploads/publish/dh/10006/image‘ could not be created 问题

问题描述

      我这边有个需求,需要将远程接收到的MultipartFile 转为File,在测试环境是正常运行,但在生产环境却报了 java.io.IOException: Directory ‘/CDDY_uploads/publish/dh/10006/image’ could not be created 的错。

java代码如下

   MultipartFile multipartFile = (MultipartFile) entry.getValue();
   String originalFilename = multipartFile.getOriginalFilename();
   File file = new File(originalFilename);FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);

排查

      我发现“/CDDY_uploads/publish/dh/10006/image”并不是我本地的目录,我怀疑是multipartFile.getOriginalFilename()这个方法获取出来的文件名前面带了目录。把获取到的文件名打印出来后,发现果然是带了路径,发现了问题所在那就好办了。

解决

      判断获取到的文件名是否带了路径,如果带了路径把路径去掉,再去根据文件名创建文件。

	MultipartFile multipartFile = (MultipartFile) entry.getValue();
    String originalFilename = multipartFile.getOriginalFilename();
    log.debug("转换前文件originalFilename: {}", originalFilename);
    //解决获取的文件名可能出现路径的问题 
    int index = originalFilename.lastIndexOf("/");
    if( index != -1){
        originalFilename = originalFilename.substring(index + 1);
    }
    log.debug("转换后文件originalFilename: {}", originalFilename);
    File file = new File(originalFilename);
    FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);

注意: 一般来讲通过postman、chrome浏览器发起的请求,获取出来的文件名是不带路径的,但是通过IE浏览器发起的请求获取出的文件名是带了路径的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值