使用HttpURLConnection.setChunkedStreamingMode()获取IOException
我已经编写了HttpUrlConnection包装器。它支持文件上传,所以我使用HttpUrlConnection.setChunkedStreamingMode()来防止OutOfMemoryException 但在将所有数据写入OutputStream后,我得到了IOException。没有这种方法,一切都很好 代码如下:使用HttpURLConnection.setChunkedStreamingMode()获取IOException,http,file-upload,io,httpurlconnection,java-io,Http,File Upload,Io,Httpurlconnection,Java Io,我已经编写了HttpUrlConnection包装器。它支持文件上传,所以我使用HttpUrlConnection.setChunkedStreamingMode()来防止OutOfMemoryException 但在将所有数据写入OutputStream后,我得到了IOException。没有这种方法,一切都很好 代码如下: HttpURLConnection connection = getConnection(); if(!isSent) { OutputStrea
HttpURLConnection connection = getConnection();
if(!isSent) {
OutputStream output;
if(!files.isEmpty()) {
connection.setRequestProperty(HEADER_CONTENT_TYPE, CONTENT_TYPE_MULTIPART);
// Tried to add this line, but still not working
connection.setRequestProperty("Transfer-Encoding","chunked");
connection.setChunkedStreamingMode(chunkSize);
output = new BufferedOutputStream(connection.getOutputStream());
writeParamsMultipart(output);
writeFilesMultipart(output);
output.write((PREFIX + BOUNDARY + PREFIX + LINEND).getBytes());
} else {
connection.setRequestProperty(HEADER_CONTENT_TYPE, CONTENT_TYPE_FORM);
output = new BufferedOutputStream(connection.getOutputStream());
output.write(paramsToUrlencoded(post).getBytes());
}
output.flush();
output.close();
isSent = true;
}
// Getting exception on this line
InputStream input = new BufferedInputStream(connection.getInputStream());
if(ENCODING_GZIP.equalsIgnoreCase(connection.getHeaderField(HEADER_CONTENT_ENCODING))) {
input = new GZIPInputStream(input);
}
return input;
默认情况下,chunkSize为1024字节。有什么问题吗
这是FileNotFoundException
这意味着URL不正确。它相当于HTTP403
与分块传输模式无关。您能提供引发异常的详细信息吗?@JohnSaxton令人惊讶的是,这是FileNotFoundException,但用于URL<代码>java.io.FileNotFoundException:http://connectionUrl 在libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)上,您确定要写入的http端点支持分块传输吗?你能用带有分块编码的cURL来写吗?@请解释一下你对这个正确答案的反感。