MultipartFile上传文件存放路径是上级目录或同级目录(及同级目录的子目录)怎么办

上传文件时遇到的存放路径问题

public String uploadExcel(MultipartFile userExcel, FlowRecord flowrecord, HttpServletRequest request) throws IOException, InvalidFormatException {
		
		// 获取附件的名称
		String filename = userExcel.getOriginalFilename();
		flowrecord.setFlre_filetitle(filename);
		
		// 设置附件的保存地址目录
		String dirPath = request.getServletContext().getRealPath("/attached/companyfiles/flow/import/" + flowrecord.getFlre_chan() + "/");		
		File filePath = new File(dirPath);
		
		// 如果保存附件的地址不存在,就先创建目录
		if ( !filePath.exists() ) {
			filePath.mkdirs();
		}
		
		flowrecord.setFlre_filelink(dirPath);
		
		try {
			
			// 使用 MultipartFile 接口的方法完成附件上传到指定位置
			userExcel.transferTo( new File( dirPath + filename ) );
			
		} catch ( Exception e ) {
			e.printStackTrace();
			return "ATTACHEDFAIL";
		}
		
		return "OK";
    }

使用以下方法获取的是在项目目录下的文件夹地址/文件路径:

	String dirPath = request.getServletContext().getRealPath("/XXX/XXX/");
	// 注明:/XXX/XXX/ 系各位在项目目录下的文件路径

比方说在Windows下,项目的目录是 F:\workspace\demo
而 /XXX/XXX/ 实际为 /attachedfiles/companyfiles/,即:

	String dirPath = request.getServletContext().getRealPath("/attachedfiles/companyfiles/");

则附件会存放到此路径下面:F:\workspace\demo\attachedfiles\companyfiles

问题来了,如果我想把附件存放到 F:\workspace\ 这一级目录下的某个文件夹里,而不放在项目的目录文件夹里怎么办

于是我查了一会网上的资历,突然想到可以用最原始的修改替换路径字符串来达到目的。
具体改变如下:

		……
		String dirPath = request.getServletContext().getRealPath("");
		dirPath = dirPath.replaceAll("demo", "attachedfile/companyfiles/");
		……

其实是这样,request.getServletContext().getRealPath("")拿到的是项目的目录路径,即:

	dirPath = "F:\workspace\demo";

那么,只需要将路径中从demo开始替换成其他路径,就可以实现开头提出大问题咯。。。所用的方法就是replace或者replaceAll。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下代码将Spring Boot中的MultipartFile对象保存到本地: ```java import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; public String saveMultipartFileLocally(MultipartFile multipartFile, String directory) throws IOException { if (multipartFile.isEmpty()) { throw new IllegalArgumentException("MultipartFile is empty"); } if (StringUtils.isEmpty(directory)) { throw new IllegalArgumentException("Directory path is empty"); } String fileName = multipartFile.getOriginalFilename(); String filePath = directory + File.separator + fileName; File file = new File(filePath); multipartFile.transferTo(file); return file.getAbsolutePath(); } ``` 这段代码中,我们首先检查MultipartFile对象是否为空,然后获取原始文件名并拼接出保存的文件路径。接下来,我们创建一个File对象,并使用transferTo()方法将MultipartFile保存到指定的本地目录中。最后,返回保存文件的绝对路径。 请注意,你需要提供一个合适的目录路径作为参数,确保目录存在并且有足够的权限进行文件保存。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot使用MultipartFile获取上传视频的时长(不用在本地生成临时文件)](https://blog.csdn.net/a116385895/article/details/104990689)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Springboot中MultipartFile的使用](https://blog.csdn.net/weixin_52457750/article/details/128532848)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [springboot环境下将File转换成MultipartFile](https://blog.csdn.net/CS5686/article/details/129209448)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值