文件的上传和下载
2016-04-17 15:48
429 查看
最简单的下载就是在< a>标签里指向文件的地址。
下面这个是最简单的文件上传
还有下载
这里用到了连个jar包,分别是
commons-fileupload-1.3.jar
commons-io-2.4.jar
(我把他们上传到我的资源里了)
Upload.java
upload.jsp
web.xml
2.下面是将上传功能稍微完善下
upload2.java
二,文件的下载
download.java
下面这个是最简单的文件上传
还有下载
这里用到了连个jar包,分别是
commons-fileupload-1.3.jar
commons-io-2.4.jar
(我把他们上传到我的资源里了)
Upload.java
package com.bright; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.IOUtils; public class Upload extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String path=this.getServletContext().getRealPath("/uploads"); String msg="ok"; //1.创建上传组件的工厂类 DiskFileItemFactory factory =new DiskFileItemFactory(); //2.获取上传组件 ServletFileUpload upload =new ServletFileUpload(factory); //3.从请求对象中获取数据 try { List<FileItem> list=upload.parseRequest(req); Iterator<FileItem> it=list.iterator(); //4.遍历集合处理请求中的数据 while(it.hasNext()){ FileItem item=it.next(); //5.判断是否是文件 if(item.isFormField()){ System.out.println(item.getString()); }else { //是文件 //6.上传文件 String filename=item.getName(); InputStream in=item.getInputStream(); //7.将输入流通过输出流写在服务器的硬盘上 File file=new File(path,filename); OutputStream outputStream=new FileOutputStream(file); //8.使用IOUtils复制文件 IOUtils.copy(in, outputStream); System.out.println(filename); //注意最后记得要关闭输出流和输入流 in.close(); outputStream.close(); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); msg="sorry!"; } System.out.println(msg); //注意上传的文件是在服务器里--tomcat中,从下面的地址就可以看出文件的地址 System.out.println(path); } }
upload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'upload.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <div style="margin:auto;"> <h1>文件上传测试</h1> <form action="upload" method="post" enctype="multipart/form-data"> 上传文字:<input type="text" name="info"> 上传文件:<input type="file" name="file"> <input type="submit"> </form> </div> </body> </html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>upload</servlet-name> <servlet-class>com.bright.Upload</servlet-class> </servlet> <servlet-mapping> <servlet-name>upload</servlet-name> <url-pattern>/upload</url-pattern> </servlet-mapping> </web-app>
2.下面是将上传功能稍微完善下
upload2.java
package com.bright; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.IOUtils; public class Upload2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf8"); //文件上传 //准备工作(找到上传的目录) String path = this.getServletContext().getRealPath("/uploads"); String tmp = this.getServletContext().getRealPath("/tmp");//临时目录 String msg = ""; //1.创建上传组件的工厂类 DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File(tmp)); //设置临时目录 factory.setSizeThreshold(1024*1024); //设置缓冲区大小 1M //2.获取上传组件 ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(1024*1024*100); //上传文件最大10M /* MyProgressListener lis = new MyProgressListener(); upload.setProgressListener(lis); */ /* * 文件上传的进度 * */ //3.从请求对象中获取数据 try { List<FileItem> list = upload.parseRequest(req); //4.遍历集合处理请求中的数据 Iterator<FileItem> it = list.iterator(); while(it.hasNext()){ //每一个表单提交的内容 FileItem item = it.next(); //5.判断是否是文件 if(item.isFormField()){ //不是文件 System.out.println(item.getFieldName()+" : "+item.getString()); }else{ //是文件 //6.上传文件 String fileName = item.getName(); //文件名 InputStream in = item.getInputStream(); //内容 //7.将输入流通过输出流写在服务器的硬盘上 /* * 文件名一般由程序生成 UUID 生成一个唯一的字符串作为名字 * 目录:根据日期来分散存放以日期命名的文件夹中 * * 存入数据库 * ID,UUIDfile(服务器硬盘上的文件名),fileName(上传的时候叫什么名字),uploadtime,info... */ File file = new File(path, fileName); OutputStream out = new FileOutputStream(file); //8.使用IOUtils复制文件 IOUtils.copy(in, out); in.close(); out.close(); } } msg = "恭喜你上传成功了!"; }catch(FileSizeLimitExceededException e){ e.printStackTrace(); msg = "上传失败,最大只能上传10M!<a href='upload.jsp'>重新上传</a>"; }catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); msg = "对不起,上传失败!<a href='upload.jsp'>重新上传</a>"; } req.setAttribute("msg", msg); req.getRequestDispatcher("/upload.jsp").forward(req, resp); System.out.println(msg); } }
二,文件的下载
download.java
// <a href="download?filename=12.txt">点击这里下载</a> /*<servlet> <servlet-name>download</servlet-name> <servlet-class>com.bright.Download</servlet-class> </servlet> <servlet-mapping> <servlet-name>download</servlet-name> <url-pattern>/download</url-pattern> </servlet-mapping> */ package com.bright; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; import sun.misc.BASE64Decoder; public class Download extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取文件的信息 String filename=req.getParameter("filename"); filename=new String(filename.getBytes("iso-8859-1"),"utf-8"); String path=this.getServletContext().getRealPath("/uploads"); InputStream in=new FileInputStream(new File(path,filename)); //判断用户现在拿什么浏览器在下载 String usemsg=req.getHeader("User-Agent"); if(usemsg.indexOf("MSIE")>0){ //IE浏览器 }else{ //其他浏览器 } //设置response,告诉浏览器不要直接显示 resp.setContentType("application/x-msdownload"); //(处理下载文件显示的文件名) filename=URLEncoder.encode(filename,"utf-8"); resp.addHeader("Content-Disposition","attachment;filename=" + filename); //向浏览器输出流对象 OutputStream out=resp.getOutputStream(); IOUtils.copy(in, out); in.close(); out.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doGet(req, resp); } }
相关文章推荐
- IOS-UI设置字体属性
- JAVA 平台下的webservice
- 【读书笔记】【Android 开发艺术探索】第4章 View 的工作原理
- java之FileInputStream与FileOutputStream
- python.杨辉三角.生成器
- ActiveMQ学习-Network connectors(1)
- 本地广播的使用
- android之getevent/sendevent/input
- 分享查看源码工具
- 学习进度条 第七周
- 图像编码中的小白问题sps ,pps ,nalu ,frame ,silce ect....
- Java基础--并发实用工具(3)
- H264中的SPS、PPS提取与作用
- EntityManager接口有三种方法来建立原生查询
- (LeetCode 307) Range Sum Query - Mutable(树状数组讲解)
- android开发笔记之Android介绍
- DirectSound播放缓冲区长度计算
- 《day15---多线程安全问题_JDK1.5的锁机制》
- QT creator出现 no executable specified时解决办法
- C count_prime 南京理工大学第八届程序设计大赛