项目中遇到问题总结一下:
在使用HttpURLConnection 上传大文件时,出现内存溢出的错误,这让我产生了错觉,输入和输出流咋会暂用内存,不就是一个数据传送的管道么,都没有把数据读取到内存中,为撒会报错。。。然后就纠结了。。。
不过实在与原来的经验相违背,然后写了一个示例直接从file中读出然后写入到输出流中,发现并没有问题
这下确认了问题出在HttpURLConnection,查看API发现,HTTP会有缓冲机制,缓存把JVM撑挂了导致内存溢出了。。。。
通过设置以下方法即可解决问题
setFixedLengthStreamingMode
public void setFixedLengthStreamingMode(int contentLength)
如果应用程序尝试写入的数据多于指示的内容长度,或者应用程序在写入指示的内容长度前关闭了 OutputStream,将抛出异常。
启用输出流时,不能自动处理验证和重定向。如果需要验证和重定向,则在读取响应时将抛出 HttpRetryException。可以查询此异常以获取错误的详细信息。
该方法必须在连接 URLConnection 前调用。
- private void uploadFile()
- {
- String urlResouce = null;
- // urlResouce = "http://localhost:8080/application_interface_manager/platform/wangpan/444.png";
- urlResouce = "http://localhost:8080/application_interface_manager/platform/wangpan/myeclipse111.exe";
- try{
- // File localFile = new File("C:\\Users\\maomao\\Documents\\111.png");
- File localFile = new File("Z:\\tools\\myeclipse-8.5.0-win32.exe");
- //创建客户端签名
- String clientToken = new CreateSignTokenImpl().getToken("caizhonghu",secretKey);
- HttpURLConnection urlConnection =
- (HttpURLConnection) (new URL(urlResouce)).openConnection();
- urlConnection.setChunkedStreamingMode(0);
- urlConnection.setRequestProperty("Charset", "UTF-8");
- urlConnection.setRequestProperty("Token", "jingdong "+accessKey+":"+clientToken);
- urlConnection.setDoInput(true);
- urlConnection.setDoOutput(true);
- urlConnection.setRequestMethod("PUT");
- OutputStream urlOutputStream = urlConnection.getOutputStream();
- FileInputStream fileInputStream = new FileInputStream(localFile);
- IOUtils.copy(fileInputStream, urlOutputStream);
- // byte[] buffer = new byte[10240];
- // long count = 0;
- // int n = 0;
- // while (-1 != (n = fileInputStream.read(buffer))) {
- // urlOutputStream.write(buffer, 0, n);
- // count += n;
- // urlOutputStream.flush();
- // }
- fileInputStream.close();
- urlOutputStream.close();
- System.out.println(urlConnection.getResponseCode());
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
相关推荐
主要介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,非常具有实用价值,需要的朋友可以参考下
本示例使用HttpUrlConnection实现上传文件,可以将手机上的文件上传到服务器 必须与my_upload工程配合运行,先启动my_upload工程
使用HttpUrlConnection实现上传文件服务器端代码,引用commons-fileupload-1.2.1.jar、commons-io-1.4.jar
Java自带的HttpURLConnection访问接口文件上传, 含普通参数值传递和文件传递
HttpURLConnection文件下载\httpURLConnection文件下载
NULL 博文链接:https://dreamoftch.iteye.com/blog/1860289
HttpURLConnection实现三方接口HTTP调用调用,带有FILE文件参数
HttpUrlConnection下载文件
通过HttpURLConnection把本地目录上的资源打包远程到另一台服务器上,有通过过滤器启动Timer,有手工上传的。
这个demo是Android使用HttpURLConnection上传图片到服务器
主要介绍了Android程序开发通过HttpURLConnection上传文件到服务器的相关资料,需要的朋友可以参考下
Netroid框架 HttpURLConnection类 文件下载demo 主要目的是测量文件下载的速度,注意网络环境的一致性
本文通过实例代码给大家介绍了Android基于HttpUrlConnection类的文件下载功能,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
HttpURLConnection的demo,里面有网络请求get post 上传文件,下载文件,介绍HttpURLConnection这个类整体流程是怎样使用的,方便初学者学习
Java利用HttpURLConnection发送post请求上传文件
下面小编就为大家带来一篇利用HttpUrlConnection 上传 接收文件的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
HttpURLConnection调用三方HTTP接口,带有FILE文件参数
实例Demo程序来示范使用HttpURLConnection实现多线程下载。 使用多线程下载文件可以更快完成文件的下载,因为客户端启动多条线程进行下载就意味着服务器也需要为该客户端提供响应的服务。假设服务器同时最多服务100...
import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import java.util.Map; public class HttpTest { private HttpURLConnection hc = ...