我有以下代码,我使用它将文件发布到服务,它工作得很好。我遇到的唯一问题是,我必须编写一个临时文件来获取用于使用restTemplate发布对象的FileSystemResource
有没有什么办法我可以修改下面的代码,这样我就不用写临时文件了?
public String postNewIcon2(Integer fileId, MultipartFile multiPartfile) {
LOG.info("Entered postNewIcon");
Map<String, Object> params = getParamsWithAppKey();
params.put("fileId", fileId);
String result = null;
File tempFile = null;
try {
String originalFileNameAndExtension = multiPartfile.getOriginalFilename();
String tempFileName = "c:\\temp\\image";
String tempFileExtensionPlusDot = ".png";
tempFile = File.createTempFile(tempFileName, tempFileExtensionPlusDot);
multiPartfile.transferTo(tempFile);
FileSystemResource fileSystemResource = new FileSystemResource(tempFile);
// URL Parameters
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
parts.add("file", fileSystemResource);
// Post
result = restTemplate.postForObject(getFullURLAppKey(URL_POST_NEW_ICON), parts, String.class, params);
} catch (RestClientException restClientException) {
System.out.println(restClientException);
} catch (IOException ioException) {
System.out.println(ioException);
} finally {
if (tempFile != null) {
boolean deleteTempFileResult = tempFile.delete();
LOG.info("deleteTempFileResult: {}", deleteTempFileResult);
}
}
return result;
}谢谢
发布于 2015-02-02 04:12:47
在Kresimir Nesek和此链接Sending Multipart File as POST parameters with RestTemplate requests的帮助下回答
下面的代码做到了这一点-现在不需要临时文件
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);发布于 2018-04-05 20:22:53
MultipartFile需要一些临时位置。请尝试此代码,以获取物理文件:
private File getTempFile(MultipartFile attachment){
CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) attachment;
DiskFileItem diskFileItem = (DiskFileItem) commonsMultipartFile.getFileItem();
return diskFileItem.getStoreLocation();
}https://stackoverflow.com/questions/28246736
复制相似问题