Java - 处理文件上传并有效地创建新的http请求

时间:2014-08-15 13:27:06

标签: java file-upload http-post

在我的自定义应用程序中,我通过文件上传表单接受文件并获取MultipartFile对象。然后根据上传表单中的其他参数进行一些处理,我准备另一个包含文件的帖子请求,并将请求发送到另一个服务器。

我使用的代码如下:

在控制器部分,我采用输入steram

             MultipartFile file = uploadedFile.getFile();
             InputStream inputStream = file.getInputStream();

将流传递给服务方法,新请求准备如下

            CloseableHttpClient closeableHttpClient = HttpClients.createDefault();

            HttpPost uploadFile = new HttpPost(url + port + path);

            MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();

            .... other parameters set here....


            multipartEntityBuilder.addBinaryBody("attachment", IOUtils.toByteArray(inputStream), ContentType.APPLICATION_OCTET_STREAM, fileName);

            HttpEntity httpEntity = multipartEntityBuilder.build();

            uploadFile.setEntity(httpEntity);

            HttpResponse httpResponse = closeableHttpClient.execute(uploadFile);

是否有更有效的方法来实现这一目标,是

的转变
     file.getInputStream()

     byte[] // by IOUtils.toByteArray(inputStream)

真的需要吗?

对此方法的任何其他建议也表示赞赏。

1 个答案:

答案 0 :(得分:1)

我们可以直接使用multipartEntityBuilder.addBinaryBody调用inputStream方法,如下所示:

multipartEntityBuilder.addBinaryBody("attachment", IOUtils.toByteArray(inputStream), ContentType.APPLICATION_OCTET_STREAM, fileName);

因此,IOUtils.toByteArray()方法会导致内存使用量大幅增加,文件将通过流式传输发送。