【发布时间】:2013-12-14 07:02:10
【问题描述】:
我想使用 HttpClient 4.3.1 上传文件。我需要添加以形成多部分输入流(以控制上传进度。)而不是 File 对象。 这是我的代码:
byte[] dump = ...;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(SENDLOG_URL);
MultipartEntityBuilder meb = MultipartEntityBuilder.create();
meb.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
// THIS WORKS!! meb.addBinaryBody("log", new File("C:\\temp.zip"), ContentType.APPLICATION_OCTET_STREAM,"log.zip");
InputStream is=new FileInputStream("C:\\temp.zip")
meb.addBinaryBody("log", is, ContentType.DEFAULT_BINARY, "log.zip");
httppost.setEntity(meb.build());
HttpResponse resp=httpclient.execute(httppost);
is.close();
使用 MultipartEntityBuilder.addBinaryBody(Strin,File) 方法有效,但使用 MultipartEntityBuilder.addBinaryBody(Strin,InputStream) 方法无效。
java客户端没有抛出任何错误,但这是远程服务器(Apache)的答案:
HTTP/1.1 400 错误请求 [日期:2013 年 11 月 28 日星期四 09:46:08 GMT,服务器:Apache/2.4.6 (Unix) mod_fcgid/2.3.7,内容长度: 226, 连接:关闭,内容类型:text/html;字符集=iso-8859-1]
为什么 new File() 和 new FileInputStream() 之间会出现这种奇怪的行为?
【问题讨论】:
-
得到响应后关闭连接。 fos.close();
-
你的意思是FileOutputStream吗?你真的可以忽略这个,它只是写入一个临时文件。
-
哎呀抱歉.....你可以创建一个输入流的实例并将其传递给 addBinaryBody 方法,一旦你收到响应关闭使用实例的连接
-
我试过了(查看我更新的代码),但没有任何变化
标签: java http apache-httpclient-4.x