3 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
解決此問題而無需使用需要磁盤上文件的FileSystemResource的一種方法是使用ByteArrayResource,這樣您就可以在帖子中發(fā)送字節(jié)數(shù)組(此代碼在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);
我重寫B(tài)yteArrayResource的getFilename,因?yàn)槿绻也坏玫娇罩羔槷惓#@然,這取決于java激活.jar是否在類路徑中,如果存在,它將使用文件名來嘗試確定內(nèi)容類型)

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
前幾天,我也遇到了同樣的問題。Google搜索將我?guī)У搅诉@里和其他幾個(gè)地方,但沒有一個(gè)提供解決此問題的方法。我最終將上傳的文件(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();
我仍在尋找解決此問題的更優(yōu)雅的方法。
- 3 回答
- 0 關(guān)注
- 2796 瀏覽
添加回答
舉報(bào)