【发布时间】:2012-09-27 14:18:09
【问题描述】:
我有一个写入OutputStream 的旧应用程序,我希望将此流的内容作为文件上传到 Servlet。我已经使用 JMeter 测试了使用 commons-fileupload 的 Servlet,它工作得很好。
我会使用 Apache HttpClient,但它需要 File 而不仅仅是输出流。我不能在本地写文件;如果有一些File 的内存实现可能会起作用?
我尝试使用HttpURLConnection(如下),但服务器响应“MalformedStreamException:流意外结束”。
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();
【问题讨论】:
-
根据定义,File 没有内存实现。但是,您可以复制 HttpClient 方法并直接传递字节或流,因为该 API 很可能通过流加载文件的字节。
标签: java upload httpurlconnection multipartform-data apache-commons-httpclient