背景
在上传附件的场景中,有一种情况比较特殊,服务器写的权限只允许日志目录,其他所有目录禁止写入,那么,如果前端以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