文件的上传和下载

来源:互联网 发布:傻瓜进销存软件 编辑:程序博客网 时间:2024/04/30 20:44

文件上传的准备

 1:准备表单    请求方式:post    enctype设置为:multipart/form-data    将enctype设置为multipart/form-data之后就不能在使用req.getParameter()     2:导入jar包    commons-fileupload-1.2.2.jar    commons-io-1.4.jar

* 创建表单

    <%@ page language="java" contentType="text/html; charset=UTF-8"     %>    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//    EN" "http://www.w3.org/TR/html4/loose.dtd">    <html>    <head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    <title>Insert title here</title>    </head>    <body>    <h1>用户信息录入</h1>    <span style="color: red">${errorMsg}</span>    <form action="/upload" method="post"  enctype="multipart/form-data">    姓名:<input name="name" /><br/>    年龄:<input name="age" /><br/>    头像:<input type="file" name="headImg" /><br/>    <input type="submit"  value="上传"/>    </form>    </body>    </html>
  • FileUploadServlet

    public class FileUploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)    throws ServletException, IOException {try {    if (!ServletFileUpload.isMultipartContent(req)) {               return; //判断提交的表单是否合法    }    ServletFileUpload upload = new ServletFileUpload(            new DiskFileItemFactory()); //创建文件解析器包含改工厂类对象    List<FileItem> list = upload.parseRequest(req);//解析请求    for (FileItem item : list) {        //迭代控件集合        if (!item.isFormField()) {      //不是普通控件时            UUID uuid = UUID.randomUUID();  //获取文件名 //获取文件夹的绝对路径            String path = req.getServletContext().getRealPath("upload");            String extension = FilenameUtils.getExtension(item                    .getName());            //获取文件的后缀名            item.write(new File(path + "\\" + uuid + "." + extension));                }                                   //调用write方法上传文件            }        } catch (Exception e) {        e.printStackTrace();        }    }}
  • 实现步骤

    1:判断表单        ServletFileUpload.isMultipartContent(req)2:创建文件解析器        ServletFileIpload upload=new ServletFileUpload(new DiskFileItemFactory())3:解析请求        List<FileItem> list=upload.parseRequest()4:迭代集合        for(FileItem item:list)5:判断不是普通表单        !item.isFormFiled()6:获取文件名,路径,文件后缀名        UUID uuid=UUID.randomUUUID();        String path=req.getSetvletContext().getRealPath("文件夹")        String extension=FilenameUtils.getExtension(item.getName()) 7:写入文件          item.write(new File(path+"\\"+uuid+"."+extension))
  • 文件类型判断

    1:自定义异常类,自定义集合封装文件类型2:判断为不支持类型时抛出异常信息3:采用对应异常类型捕获继续抛出4:将文件上传封装为工具类5:捕获异常,将异常信息放到请求作用域中6:使用请求转发返回初始页面,并使用EL表达式获取作用域中的值

文件下载

  • DownloadServlet

        //获取参数 String filename = req.getParameter("filename");    //获取目录String dir = getServletContext().getRealPath("WEB-INF/download");    //获取输出流ServletOutputStream out = resp.getOutputStream();    //处理文件名称      中文乱码resp.setHeader("Content-Disposition", "attachment; filename="+new String(filename.getBytes("UTF-8"),"ISO-8859-1"));    //解决在IE6默认打开文件的方法resp.setContentType("applicatoin/x-msdownload");    //创建文件File f = new File(dir,filename);    //拷贝文件Files.copy(Paths.get(f.getAbsolutePath()), out);
  • download.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><a href="/download?filename=xhr.zip">xhr.zip</a><br/><a href="/download?filename=程序员.zip">程序员.zip</a></body></html>
  • 默认为get请求,需要在server.xml文件中设置编码

    <Connector port="80" protocol="HTTP/1.1"       connectionTimeout="20000"       redirectPort="8443"        URIEncoding="UTF-8"/>
0 0
原创粉丝点击