小白一个今天写上传文件到服务器的过程中遇到了一个坑,网上很多文章都是直接把File对象直接传给了transferto()方法当参数,然后用postman请求就是报错,报错如下:
/api/upload java.io.FileNotFoundException: C:\Users\89661\AppData\Local\Temp\E:\fileUpload\20190403203101_back1.png (文件名、目录名或卷标语法不正确。),后面的路径是我要保存的路径,前面的路径是transferto()方法自己加的,然后我就找了一天的解决方法,终于大晚上的找到了。
https://blog.csdn.net/linfujian1999/article/details/77571918
问题再现:
截取部分代码
public String analyzeFile(MultipartFile file) {

    if(!file.isEmpty()) {String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/";File dir = new File(filePath);if(! dir.exists()) {dir.mkdir();}String path = filePath + file.getOriginalFilename();File tempFile = null;//save to the /upload pathtry {tempFile =  new File(path);file.transferTo(tempFile);

1)取得应用程序的path,加上upload 形成如: app directory/application/upload的路径并生成一个文件夹(没有的话),2)在该文件夹下生成一个和上传文件同名的文件
3)将上传文件MultiPartFile transfer to 上述文件中

springBoot本地测试是没有问题的(内嵌tomcat server),但打包上传到 glassfish server中去跑,却发现 在临时文件路径前又添加了generated/jsp的路径,造成了找不到文件的错误。

这个错误是file.transferTo(tempFile); 造成的,因为transferTo方法会默认在tempFile前添加一个新的路径,总之是个没用的路径。这样一来,tempFile path是有的,但前边加一个路径后,就造成了找不到文件的错误。这里的解决办法是不用TransferTo()方法,改用org.apache.commons.io.FileUtils 。

maven的pom.xml中添加

commons-io commons-io 2.5

然后之前的代码改成

public String analyzeFile(MultipartFile file) {

    if(!file.isEmpty()) {String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/";File dir = new File(filePath);if(! dir.exists()) {dir.mkdir();}String path = filePath + file.getOriginalFilename();File tempFile = null;//save to the /upload pathtry {tempFile =  new File(path);FileUtils.copyInputStreamToFile(file.getInputStream(), tempFile);

这样就将multipartfile正常转到tempFile中了。

这个上面写的就是如果传给transferto()方法一个File对象他会在前面加一个默认路径在你的File对象路径前面,transfer没有不带参的方法。上面那个方法直接导入依赖jar包,然后再把File对象的路径传入到FileUtils.copyInputStreamToFile(file.getInputStream(), tempFile);
方法就行。
方法二:我看transferto()方法还有一个 default void transferTo(Path dest) throws IOException, IllegalStateException {
FileCopyUtils.copy(this.getInputStream(), Files.newOutputStream(dest));
} 还有一个这个方法,这个方法感觉跟上面的那个方法一样,我就研究了一下Path 引用类型
Path path1 = Paths.get(“E:”,“fileUpload”,fileName);
if (true){
//上传文件
System.out.println("-----"+dest);
file.transferTo(path1); //保存文件
//FileUtils.copyInputStreamToFile(file.getInputStream(), dest);
System.out.print(“保存文件路径”+path1+"\n");
}
Path 引用类型有一个get(参数)方法这个方法可以获取路径,我就把我需要上传的路径写了进去,结果也可以上传文件。

transferto遇到的问题相关推荐

  1. 【Netty】零拷贝案例 ( transferTo | transferFrom )

    文章目录 一. 案例需求 二. 传统 BIO 拷贝案例 三. 零拷贝案例 服务器端 四. 零拷贝案例 客户端 五. 零拷贝案例 运行与分析 一. 案例需求 给出两个案例 , 一个是 使用普通的 BIO ...

  2. transferto 文件不存在_文件上传时,MultipartFile.transferTo() 方法报 FileNotFoundException...

    Spring Upload File 报错FileNotFoundException 环境: Springboot2.0.4JDK1.8内嵌 Apache Tomcat/8.5.32 1.前端代码 前 ...

  3. transferto的流这么关闭_Java 9中InputStream的transferTo()方法的重要性?

    在Java 9中,transferTo()方法已添加到InputStream类中.该方法已用于在Java中将数据从输入流复制到输出流.这意味着它将从输入流中读取所有字节,然后按读取顺序将字节写入输出流 ...

  4. transferto遇到的问题java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp

    将MultipartFile转为File,使用注解掉的方法时错误:java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local ...

  5. 聊聊MultipartFile的transferTo方法

    默认已经知道:MultipartFile  这个类一般是用来接受前台传过来的文件. 那transferTo方法有什么作用呢? 打开源码: public void transferTo(File des ...

  6. transferTo和transferFrom

    transferTo和transferFrom允许我们将一个通道和另一个通道直接相连,这样很容易实现文件拷贝的功能,如下代码: String[] arr=new String[]{"D:\\ ...

  7. SpringMVC的 transferTo使用

    在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石--SpringMVC其中的一个优势.Spring通过对Servl ...

  8. 【SpringBoot】MultipartFile的transferTo()方法详解

    目录 背景 问题 源码分析 后记 背景 我们在编写Spring Boot应用中,常会遇到文件上传问题,Spring Boot Web提供了MutipartFile的文件支持,具体和File的区别可自行 ...

  9. SpringBoot用MultipartFile.transferTo传递相对路径的问题

    起因: 工作中简单的图片不需要使用第三方文件存储服务,上传到项目所在路径保存,在使用 MultipartFile.transferTo 转存文件时报错,路径找不到. 原因: 当MultipartFil ...

  10. MultipartFile.transferTo(dest) 报找不到文件错误以及解决方法

    MultipartFile.transferTo(dest) 报找不到文件 今天使用transferTo这个方法进行上传文件的使用发现了一些路径的一些问题,查找了一下记录问题所在 前端上传网页,使用的 ...

最新文章

  1. SQLite简介与安装
  2. oracle重新启动步骤
  3. Python基础-模块
  4. win10安装pytorch
  5. 美团mysql 闪回_MyFlash——美团点评的开源MySQL闪回工具
  6. 2012年CS毕业生
  7. 1.1 决策树算法原理
  8. 操作系统真实的虚拟内存是什么样的
  9. 小案例:编写立方体六个面,合成一张全景图后端
  10. ORA-01747: user.table.column, table.column 或列说明无效
  11. java 进度条插件_java进度条控件如何使用?
  12. QQ互联开发者信息认证
  13. 对于接口得容错性测试
  14. Jenkins之注入自定义环境变量
  15. 谢特——后缀数组+tire 树
  16. 【职场攻略】送礼给老板有讲究
  17. 嵌入式设备和固件中的自动漏洞检测(一):概览
  18. linux显示子系统-framebuffer架构分析
  19. 数学建模——评价算法
  20. 2023.05.14十四届蓝桥杯青少组中高级组省赛Python

热门文章

  1. Meta云游戏架构解析,目标是降低AR/VR游戏门槛
  2. 入门C语言——逻辑运算
  3. 小型软件开发团队如何培养人才
  4. 机械设计基础B【2】平面连杆
  5. 图像拼接 - 多波段融合
  6. 中国工程院发布“中国电子信息工程科技发展十大趋势”
  7. 小数化分数的口诀表_五年级数学下册分数与小数的互化,常用的小数化成分数表,要熟记...
  8. python文本词频统计是字典吗_【python】文章、文本内容做词频统计(使用jieba分词,添加自定义字典)...
  9. 软考必过 - 系统架构师 - 企业信息化与战略规划
  10. Qt 制作电子表格时候应该注意的地方