文件的下载与上传
2016-07-17 00:21
351 查看
文件的下载与上传
一、文件下载
文件下载的例子在我们周围很常见,这里用java代码实现一个文件下载的例子。1.想要下载某个文件,我们需要知道资源的路径。
//文件资源的地址 String path ="http://localhost:8080/hello/info.txt"; //将地址转化为url URL url =new URL(path);
2.利用这个url打开一个远程链接,然后获取响应码。
//打开链接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //获得响应码 int code = connection.getResponseCode();
这里我们还可以设置range,来实现对文件部分下载的功能。如果设了range,我们在获取请求码时就不能用200,而应该用206.
connection.addRequestProperty("range", "bytes:-1000");
3.获取到响应码之后,开始读取数据,然后将数据写到本地
if(code == 206){ InputStream is = connection.getInputStream(); FileOutputStream fos =new FileOutputStream("info.txt"); int length=0; byte[] buff=new byte[1024]; while((length=is.read(buff))!=-1){ fos.write(buff, 0, length); } is.close(); fos.close(); System.out.println("下载完成"); }
二、文件上传
这里我们采用apache fileupload第三方框架的方式将文件上传。导入相应的架包。commons-fileupload-1.2.2.jar,commons-io-2.0.1.jar
构建磁盘文件工厂。
//1.构建磁盘文件工厂 DiskFileItemFactory factory =new DiskFileItemFactory();
通过文件工厂获取一个文件上传的核心类
//2.通过文件工厂获取一个文件上传的核心类 ServletFileUpload fileUpload =new ServletFileUpload(factory);
解析request,返回List
try { List<FileItem> fileItems = fileUpload.parseRequest(request); //循环取出每个fileItem for (FileItem fileItem : fileItems) { if(fileItem.isFormField()){ //是普通项 String fieldName =fileItem.getFieldName(); String name =fileItem.getString(); System.out.println(fieldName+" "+name); }else{ //文件上传项 String name =fileItem.getName();//文件名 InputStream is = fileItem.getInputStream(); FileOutputStream fos =new FileOutputStream("i:\\"+name); int length=0; byte[]buff=new byte[1024]; while((length=is.read(buff))!=-1){ fos.write(buff, 0, length); } is.close(); fos.close(); } }
这里我们就基本上将上传的功能完成了。然后我们还可以将功能完善一下。当上传的文件过大是,我们可以设置缓存。
//添加缓存 factory.setSizeThreshold(1024*1024); //获取绝对路径 String realPath =getServletContext().getRealPath("temp"); factory.setRepository(new File(realPath));
这里我们需要先在项目的工作区间里创建一个temp文件夹。然后我们还需要在关闭了流资源之后,将这些缓存文件删掉。
fileItem.delete();
最后还两个小问题,也是很重要的问题。
(1).个就是我们在将数据提交到servlet的时候,我们的表单必须是以post请求提交数据,而且还要添加一个属性enctype。
<form action="/fileDown/MyServlet" method="post" enctype="multipart/form-data">
(2).如果文件名中有中文,我们不进行处理的话,就会出现乱码的问题,所以我们在得到核心类后进行编码设置。
fileUpload.setHeaderEncoding("UTF-8");
OK,搞定!
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树