zoukankan      html  css  js  c++  java
  • 69期-Java SE-054_文件上传下载

    ### 文件上传下载
    
    - 文件上传
    
    - 客户端
    
      1、input 的 type 设置为 file。
    
      2、form 表单的 method 设置为 post(get 会将文件名传给后台,而非文件本身)
    
      3、form 表单的 enctype 设置为 multipart/form-data (以二进制的形式传输数据)
    
    - 服务端
    
      commons-fileupload,commons-io
    
      基本思想:commons-fileupload 可以解析请求,得到一个泛型为 FileItem 的集合。
    
      commons-fileupload 可以将所有的请求信息都解析成 FileItem 对象,无论是表单域还是文件域。
    
      开发者就可以对 FileItem 集合进行操作,从而完成上传。
    
      上传组件可以将传来的二进制数据解析成一个集合,进而方便开发。
    
    ```jsp
    <%--
      Created by IntelliJ IDEA.
      User: southwind
      Date: 2019-07-28
      Time: 20:16
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <form action="/upload.do" enctype="multipart/form-data" method="post">
            <input type="file" name="img"/>
            <input type="text" name="desc"/>
            <input type="submit" value="上传"/>
        </form>
    </body>
    </html>
    ```
    
    
    
    ```java
    package com.southwind.controller;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.util.List;
    
    @WebServlet("/upload.do")
    public class UploadServlet extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
            //创建DiskFileItemFactory
            DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
            //创建文件解析器
            ServletFileUpload upload = new ServletFileUpload(fileItemFactory);
            //获取FileItem集合
            try {
                List<FileItem> list = upload.parseRequest(req);
                //遍历list
                for (FileItem fileItem:list){
                    if(!fileItem.isFormField()){
                        String fileName = fileItem.getName();
                        try {
                            InputStream inputStream = fileItem.getInputStream();
                            String path = req.getServletContext().getRealPath("");
                            OutputStream outputStream = new FileOutputStream(path+"/files/"+fileName);
                            int temp = 0;
                            while((temp=inputStream.read())!=-1){
                                outputStream.write(temp);
                            }
                            inputStream.close();
                            outputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
    
        }
    }
    ```
    
    
    
    - 文件下载
    
    ```jsp
    <%--
      Created by IntelliJ IDEA.
      User: southwind
      Date: 2019-07-28
      Time: 21:43
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <a href="/download.do">1.png</a>
    </body>
    </html>
    ```
    
    
    
    ```java
    package com.southwind.controller;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    @WebServlet("/download.do")
    public class DownloadServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("application/x-msdownload");
            String fileName = "1.png";
            resp.setHeader("Content-Disposition","attachment;filename="+fileName);
            OutputStream outputStream = resp.getOutputStream();
            String path = req.getServletContext().getRealPath("")+"/files/"+fileName;
            InputStream inputStream = new FileInputStream(path);
            int temp = 0;
            while((temp = inputStream.read())!=-1){
                outputStream.write(temp);
            }
            outputStream.close();
            inputStream.close();
        }
    }
    ```

     download.jsp

    <%--
      Created by IntelliJ IDEA.
      User: southwind
      Date: 2019-07-28
      Time: 21:43
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <a href="/download.do">1.png</a>
        <a href="/download.do">1.png</a>
    </body>
    </html>

    upload.jsp

    <%--
      Created by IntelliJ IDEA.
      User: southwind
      Date: 2019-07-28
      Time: 20:16
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <form action="/upload.do" enctype="multipart/form-data" method="post">
            <input type="file" name="img"/>
            <input type="text" name="desc"/>
            <input type="submit" value="上传"/>
        </form>
    </body>
    </html>

     web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    </web-app>

     

     

     DownloadServlet.java

    package com.southwind.controller;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    @WebServlet("/download.do")
    public class DownloadServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String name = req.getParameter("name");
            resp.setContentType("application/x-msdownload");
            String fileName = "1.png";
            resp.setHeader("Content-Disposition","attachment;filename="+fileName);
            OutputStream outputStream = resp.getOutputStream();
            String path = req.getServletContext().getRealPath("")+"/files/"+fileName;
            InputStream inputStream = new FileInputStream(path);
            int temp = 0;
            while((temp = inputStream.read())!=-1){
                outputStream.write(temp);
            }
            outputStream.close();
            inputStream.close();
        }
    }

    UploadServlet.java

    package com.southwind.controller;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.util.List;
    
    @WebServlet("/upload.do")
    public class UploadServlet extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
            //创建DiskFileItemFactory
            DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
            //创建文件解析器
            ServletFileUpload upload = new ServletFileUpload(fileItemFactory);
            //获取FileItem集合
            try {
                List<FileItem> list = upload.parseRequest(req);
                //遍历list
                for (FileItem fileItem:list){
                    if(!fileItem.isFormField()){
                        String fileName = fileItem.getName();
                        try {
                            InputStream inputStream = fileItem.getInputStream();
                            String path = req.getServletContext().getRealPath("");
                            OutputStream outputStream = new FileOutputStream(path+"/files/"+fileName);
                            int temp = 0;
                            while((temp=inputStream.read())!=-1){
                                outputStream.write(temp);
                            }
                            inputStream.close();
                            outputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
    
        }
    }
  • 相关阅读:
    PostgreSQL数据库管理:定期vacuum
    关于压力测试的思路
    作业自动提示功能设计思路
    This system is not registered with RHN
    读《高性能建站指南》(上)
    Ubuntu下PostgreSQL数据库集群(PL/Proxy)配置方法
    PG SQL数据库读写分离的思路
    ASP.NET知识点的明晰(非原创,东拼西凑的,向这些内容的原创者致敬)
    [转]Effective C#原则4:用条件属性而不是#if
    如何在Word文档中插入一条分隔线?
  • 原文地址:https://www.cnblogs.com/HiJackykun/p/11538339.html
Copyright © 2011-2022 走看看