我使用的是HttpClient 4.3.3。我的任务是将文件上传到服务器上。 以下是我的代码:
InputStream inputStream = new FileInputStream(new File("/path/to/file"));
byte[] data;
data = IOUtils.toByteArray(inputStream);
InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data),"file-name-on-ser");
MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart("file",inputStreamBody);
HttpPost httpPost = new HttpPost("file upload URL");
httpPost.setEntity(multipartEntity.build());
CloseableHttpResponse response = httpclient.execute(httpPost);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null)
{
System.out.println(line);
}
当我运行此代码时,它成功连接到服务器。但响应的输出是
<html>
<head><title>411 Length Required</title></head>
<body bgcolor="white">
<center><h1>411 Length Required</h1></center>
<hr><center>server-name</center>
</body>
</html>
当我使用firebug进行调试时,我看到以下Request头。
响应标题查看来源
Cache-Control no-store,no-cache
连接保持活力
日期星期四,2014年5月22日08:58:02 GMT
保持活动超时= 30
服务器*****
Set-Cookie **** Path = /
转移编码分块
请求标题浏览源
接受text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
接受编码gzip,deflate
Accept-Language en-US,en; q = 0.5
连接保持活力
Cookie ****
主持人*****
Referer https:// **** / shareupload /
User-Agent Mozilla / 5.0(Windows NT 6.1; rv:29.0)Gecko / 20100101 Firefox / 29.0
从上传流请求标题
Content-Length 12642
Content-Type multipart / form-data;边界= --------------------------- 105143784893
我在堆栈溢出时遇到过类似的问题。
2)File upload using apache's httpclient library not working
但我仍然无法找到问题的解决方案。 我是否需要在请求标头中设置Content-Length和Content-Type参数?
提前谢谢你。
答案 0 :(得分:1)
尝试:
InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data),"file-name-on-ser"){
@Override
public long getContentLength(){return data.length();}
};