Java – 将OutputStream上传为HTTP文件上载

我有一个写入OutputStream的遗留应用程序,我希望将此流的内容作为文件上载到Servlet。 我已经使用JMeter测试了使用commons-fileupload的Servlet,它运行得很好。

我会使用Apache HttpClient,但它需要一个File而不仅仅是一个输出流。 我不能在本地写一个文件; 如果有一些内存中的File实现可能可行吗?

我尝试过使用HttpURLConnection (下面),但服务器响应“MalformedStreamException:Stream意外结束”。

  URL url = new URL("http", "localhost", 8080, "/upload"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); String boundary = "---------------------------7d226f700d0"; connection.setRequestProperty("Content-Disposition", "form-data; name=\"file\""); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary); connection.setRequestProperty("Accept", "application/json"); connection.setRequestMethod("POST"); connection.setChunkedStreamingMode(0); connection.connect(); OutputStream out = connection.getOutputStream(); byte[] boundaryBytes =("--" + boundary + "\r\n").getBytes(); out.write(boundaryBytes); //App writes to outputstream here out.write("\r\n".getBytes()); out.write(("--"+boundary+"--").getBytes()); out.write("\r\n".getBytes()); out.flush(); out.close(); connection.disconnect(); 

PostMethod允许您设置RequestEntity,这是一个可以实现的接口。 您只需要适当地实现RequestEntity.writeRequest方法。

或者,如果您希望HttpClient为您处理多部分内容,您可以将MultipartRequestEntity与自定义部分一起使用。