Java工程中,通过restTemplate调用外部接口上传文件时,先把上传的文件写入到本地临时目录,然后再上传到服务器上,结果服务器上面的文件size为0 - 勇敢
Java工程中,通过restTemplate调用外部接口上传文件时,先把上传的文件写入到本地临时目录,写入本地文件正常,但是上传到服务器后发现size大小为零,请问是什么原因?【问题分析】Fastjson 序列化导致流被意外清空
通常在组装请求参数后,会使用 fastjson 的 JSON.toJSONString() 打印日志,fastjson 在序列化 FileSystemResource 对象时,可能会通过其 getInputStream() 方法尝试读取流来获取内容。
这会导致文件输入流的位置被移动到末尾或直接被关闭,当真正发起请求时,RestTemplate 再次读取流时已无数据可读,最终导致写入本地和上传的文件大小均为 0 。【解决方案】
删除对包含文件资源的 MultiValueMap 进行的 fastjson 序列化日志打印,或改用其他不触发流读取的日志方式。
