3 回答
TA贡献1830条经验 获得超3个赞
解决此问题而无需使用需要磁盘上文件的FileSystemResource的一种方法是使用ByteArrayResource,这样您就可以在帖子中发送字节数组(此代码在Spring 3.2.3中有效):
MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
final String filename="somefile.txt";
map.add("name", filename);
map.add("filename", filename);
ByteArrayResource contentsAsResource = new ByteArrayResource(content.getBytes("UTF-8")){
@Override
public String getFilename(){
return filename;
}
};
map.add("file", contentsAsResource);
String result = restTemplate.postForObject(urlForFacade, map, String.class);
我重写ByteArrayResource的getFilename,因为如果我不得到空指针异常(显然,这取决于java激活.jar是否在类路径中,如果存在,它将使用文件名来尝试确定内容类型)
TA贡献1936条经验 获得超6个赞
前几天,我也遇到了同样的问题。Google搜索将我带到了这里和其他几个地方,但没有一个提供解决此问题的方法。我最终将上传的文件(MultiPartFile)保存为tmp文件,然后使用FileSystemResource通过RestTemplate上传它。这是我使用的代码
String tempFileName = "/tmp/" + multiFile.getOriginalFileName();
FileOutputStream fo = new FileOutputStream(tempFileName);
fo.write(asset.getBytes());
fo.close();
parts.add("file", new FileSystemResource(tempFileName));
String response = restTemplate.postForObject(uploadUrl, parts, String.class, authToken, path);
//clean-up
File f = new File(tempFileName);
f.delete();
我仍在寻找解决此问题的更优雅的方法。
- 3 回答
- 0 关注
- 2670 浏览
添加回答
举报