在我的自定义应用程序中,我通过文件上传表单接受文件并获取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)
真的需要吗?
对此方法的任何其他建议也表示赞赏。
答案 0 :(得分:1)
我们可以直接使用multipartEntityBuilder.addBinaryBody
调用inputStream
方法,如下所示:
multipartEntityBuilder.addBinaryBody("attachment", IOUtils.toByteArray(inputStream), ContentType.APPLICATION_OCTET_STREAM, fileName);
因此,IOUtils.toByteArray()方法会导致内存使用量大幅增加,文件将通过流式传输发送。