模拟multipart/form-data提交文件

当遇到服务器只允许在特定目录写入文件时,传统上传方式无法工作。本文介绍了如何将文件转换为base64字符串提交,然后在服务器端通过创建request装饰类,模拟multipart/form-data文件流,避免直接写入文件系统,从而解决权限问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

在上传附件的场景中,有一种情况比较特殊,服务器写的权限只允许日志目录,其他所有目录禁止写入,那么,如果前端以multipart/form-data方式提交文件的话,因为没有写权限,所以无法把文件写入到服务器的临时目录。
一般这种情况下可以采用把文件转换成base64格式,以字符串形式提交到服务器,服务器再还原文件保存即可。
post(x-www-form-urlencoded ) ---> 保存文件
但是还有一种特殊情况,得到base64还原的文件后(缓存),需要把文件在request中手动堆砌一个multipart/form-data的文件流,然后再调其他微服务提供的接口。
post(x-www-form-urlencoded ) ---> post(multipart/form-data) ----> 保存文件
这种情况怎么办呢?
通过阅读源码可以得到以下解决方案↓

解决方案

因为这个案例是需要把客户端的request完完整整的发给目标服务器,所以这里就复用了request(主要是本人能力有限,看源码也没法自己实例化一个request)

创建一个request的装饰类
	/**
	 * 继承HttpServletRequestWrapper,创建装饰类,以达到修改HttpServletRequest参数的目的.
	 */
	private class ModifyParametersWrapper extends HttpServletRequestWrapper {

		@Override
		pub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值