还剩1页未读,继续阅读
文本内容:
传输数据的默认上限urlconnection传输数据的默认上限取决于底层使用的URLConnection HTTP协议和服务器的配置在中,没有明确规定请求体HTTP/
1.0的大小限制,但是服务器可能会设置自己的限制Request Body而在中,有一个默认的请求体大小限制为但是服务HTTP/
1.12GB,器也可以通过修改配置来改变这个限制举例来说,在中使用进行请求时,Java URLConnection POST默认情况下会将数据缓存到内存中,并在发送请求时一次性将其写入网络流中如果数据量过大,可能会导致内存溢出或者网络传输失败此时需要手动设置编码或者分块上传等方式来Chunked避免这种情况以下是一个使用进行请求并上传文件的URLConnectionPOST示例代码import java.io.Buffered Reader;import java.io.File;importjava.io.lnputStreamReader;importjava.net.HttpURLConnection;import java.net.URL;public classFileUploader{public staticvoid mainString[]args throwsException{String boundary=,,===H+System.currentTimeMillisiiURL url=new URL,,http://example.com/upload,,;HttpURLConnection conn=HttpURLConnectionurl.openConnection;conn.setDoOutputtrue;conn.setRequestMethodPOST;conn.setRequestProperty,,Content-TypeM,,,multipart/form-data;boundary=+boundary;//上传文件File file=new File/path/to/file;StringBuilder sb=new StringBuilder;sb.append,l-,,.appendboundary.append,,\r\nH;sb.appendMContent-Disposition:form-data;name=\file\;filename=\+file.getName+\\r\n;sb.appendMContent-Type:application/octet-stream\r\n\r\nM;byte[]header=sb.toString.getBytesUTF-8;byte[]footer=H\r\n-J,+boundary+-\r\n.getBytesUTF-8;conn.setRequestPropertyC^ontent-Length,String.valueOfheader.length+file.length+footerdength;conn.setFixedLengthStreamingModeheader.length+file.length+footer.length;conn.connect;conn.getOutputStream.writeheader;//上传文件内容BufferedReader br=new BufferedRea dernewlnputStreamReaderconn.getlnputStream;String line;while line=br.readLine!=null{System.out.printlnline;conn.getOutputStream.writefooter;}在这个例子中,我们手动设置了格式,并multipart/form-data使用分块上传的方式来避免一次性将整个文件写入网络流中同时,在设置时,也需要将请求头、文件内容和请Content-Length求尾的长度都计算在内。