gpt4 book ai didi

Java Apache HttpClient 上传文件出错

转载 作者:可可西里 更新时间:2023-11-01 16:18:19 26 4
gpt4 key购买 nike

我想使用 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 Bad Request [Date: Thu, 28 Nov 2013 09:46:08 GMT, Server: Apache/2.4.6 (Unix) mod_fcgid/2.3.7, Content-Length: 226, Connection: close, Content-Type: text/html; charset=iso-8859-1]

为什么 new File() 和 new FileInputStream() 之间会出现这种奇怪的行为?

最佳答案

这一切都非常简单。在前一种情况下,可以计算多部分实体内容的总长度,前提是其所有部分的长度都是已知的。此类实体可以包含在由 Content-Length header 分隔的请求中。在后一种情况下,无法确定总实体长度,并且请求使用 block 编码进行传输。显然,一些协议(protocol)合规性有限的服务器端脚本无法处理没有 Content-Length header 的请求。

关于Java Apache HttpClient 上传文件出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20262769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com