Spring启动使用客户端Java代码上传多部分文件

时间:2017-02-09 19:25:02

标签: java spring spring-mvc multipart

我在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();
  }
}

2 个答案:

答案 0 :(得分:1)

您可以使用Spring的HttpEntityByteArrayResource上传文件,以下是一个示例:

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}}