我在spring boot中编写了一个接收文件的restful web服务。
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public void uploadFile(@RequestParam("file") MultipartFile uploadfile) {
System.out.println("filename: " + uploadfile.getName());
}
我们如何将文件从客户端java代码上传到Web服务。而不是AJAX调用或HTML页面形成多部分请求?
下面的代码使用JSON对象调用Web服务。像这样我想在上面写的Web服务中接收文件。
void clientRequest(String server_url, JSONObject fileObj){
try {
URL url = new URL(server_url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
OutputStream os = conn.getOutputStream();
os.write(fileObj.toString().getBytes());
os.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
logger.info("output :: " + output);
}
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
您可以使用Spring的HttpEntity
和ByteArrayResource
上传文件,以下是一个示例:
MultiValueMap<String, Object> data = new LinkedMultiValueMap<String, Object>();
ByteArrayResource resource = new ByteArrayResource(file.getBytes()) {
@Override
public String getFilename() {
return file.getName();
}
};
data.add("file", resource);
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(data, requestHeaders);
final ResponseEntity<<SomeClass>> responseEntity = restTemplate.exchange(<url>,
HttpMethod.POST, requestEntity, new ParameterizedTypeReference<SomeClass>(){});
SomeClass result = responseEntity.getBody();
答案 1 :(得分:0)
如果您想使用MultipartFile
,请在申请时使用multipart/form-data
mimetype。您应该构建一个包含单个字段file
的特定多部分实体,而不是将JSON作为请求实体发送。
这就是它的完成方式:{{3}}