解决 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浏览器发起的请求获取出的文件名是带了路径的。

你可能感兴趣的:(java,java,开发语言,后端)