1、报错案例代码
后端:

	public UploadRes upLoadFile(MultipartFile file, String savePath) {
		UploadRes uploadRes = new UploadRes();
		try {
			File saveDir = new File(savePath).getParentFile();
			// 判断路径是否存在,如果不存在就创建一个
			if (saveDir != null && !saveDir.exists()) {
				saveDir.mkdirs();
			file.transferTo(new File(savePath));
			uploadRes.setFlag(true);
			uploadRes.setResFilePath(savePath);
			uploadRes.setMsg("文件上传成功");
			uploadRes.setOriFileName(file.getOriginalFilename());
		} catch (Exception e) {
			e.printStackTrace();
			uploadRes.setFlag(false);
			uploadRes.setMsg("文件存储失败");
		return uploadRes;

本例运行时参数
savePath为相对路径/home/upload/aaa.jpg
在执行file.transferTo(new File(savePath))时,报错提示
FileNotFoundException: C:\Users\XXX\AppData\Local\Temp\tomcat.9095.675054628671612619\work…(系统找不到指定的路径)。

2、修改后代码示例

public UploadRes upLoadFile(MultipartFile file, String savePath) {
		UploadRes uploadRes = new UploadRes();
		try {
//			File saveDir = new File(savePath).getParentFile();
//			// 判断路径是否存在,如果不存在就创建一个
//			if (saveDir != null && !saveDir.exists()) {
//				saveDir.mkdirs();
//			}
//			file.transferTo(new File(savePath));
			// 相对路径转绝对路径进行保存,防止相对路径找不到临时文件
			File dest = new File(new File(savePath).getAbsolutePath());
			if (!dest.getParentFile().exists()) {
				dest.getParentFile().mkdirs();
			file.transferTo(dest);
			uploadRes.setFlag(true);
			uploadRes.setResFilePath(savePath);
			uploadRes.setMsg("文件上传成功");
			uploadRes.setOriFileName(file.getOriginalFilename());
		} catch (Exception e) {
			e.printStackTrace();
			uploadRes.setFlag(false);
			uploadRes.setMsg("文件存储失败");
		return uploadRes;

此时运行提交,代码没有报错,文件上传成功。
运行时new File(savePath).getAbsolutePath()后,可以debugger看到文件路径为D:\home\upload\aaa.jpg

3、问题分析:
可以通过参数看到,错误案例时,上传文件的路径为相对路径。成功的案例因为多new File转为绝对路径。
file.transferTo(dest);会根据dest文件的实例化路径去做处理。判断如果是相对路径,则使用temp目录,就是上诉报错的C:\Users\XXX\AppD…。如果是绝对路径就可以找到直接运输保存到新文件。

当然本例仅为file.transferTo(dest)方法的修复,也可以通过其他方式,
如:引入

commons-io
commons-io
2.5

调用如下的方法
FileUtils.copyInputStreamToFile(MultipartFile.getInputStream(),destFile);
经过调试应该也是可以的。

学海无涯苦作舟!!!

判断如果是相对路径,则使用temp目录,就是上诉报错的C:\Users\XXX\AppD…FileNotFoundException: C:\Users\XXX\AppData\Local\Temp\tomcat.9095.675054628671612619\work…运行时new File(savePath).getAbsolutePath()后,可以debugger看到文件路径为D:\home\upload\aaa.jpg。可以通过参数看到,错误案例时,上传文件的路径为相对路径。
解决上文件提示java.io.IOException: java.io.FileNotFoundException:系统不到指定路径。 file.transferTo 方法调用时,判断如果是相对路径,则使用temp目录。 transferTo 入参数定义为绝对路径
很多人发现电脑中C:\Users\用户名\AppData 占据了很大的空间,这些文件都是什么?可以将其删除吗?下面为大家详细介绍相关知识! C:\Users\用户名\AppData里面一般有三个文件夹,分别是LocalLocalLow,Roaming,简单地来说,都是用来存放软件的配置文件和临时文件的,里面有很多以软件名称或软件公司命名的文件夹,理论上都可以删除。但是但是尽量不要删除,这里边存放的是软件运行时和结束后的数据和配置文件,如果删了,会导致软件不正常或者出错 举个例子: 例如,如果安装了Phot
1、问题描述: 想要到 ‘C:\Users\dell\AppData\Roaming’ 中的某个文件,却发现不到 AppData 文件夹; 2、问题展示: 即便是打开了 ‘C:\Users\dell’ ,在其中也不到 ‘AppData’ 这个文件夹,原因是被隐藏起来了; 3、问题分析: **认为原因:**是为了保护相关数据的安全而被隐藏保护了起来,但也是可以把其隐藏显示出来的; 4、解决的问题方法: 其一、打开到 ‘AppData’ 上一层的文件夹的位置:‘C:\Users\dell’;
根据引用,可以直接在C:\Users\Admin\AppData\Local\Temp目录下到一个名为rebel.xml的拷贝文件,并将其复制到相应的目录下。另外,也可以根据引用中的示例,在项目目录下创建一个名为rebel.xml的文件,并在其中添加相应的配置信息。引用中指出,使用eclipse安装了jebel插件后,项目会自动生成rebel.xml文件。如果在更新、清理垃圾等操作后出现问题,可能是因为不到rebel.xml文件。解决这个问题的方法是确认rebel.xml文件路径是否正确,并确保文件存在于该路径下。<span class="em">1</span><span class="em">2</span><span class="em">3</span>