zoukankan      html  css  js  c++  java
  • 文件上传下载

    一.上传

    1.前端:

    <form method="post" action="FileUpload" enctype="multipart/form-data">
      <input type="file" /> 
      <input  type="submit" value="上传" />
    </form>

    2.后台:

    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.List;
    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 org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import dao.FileDao;
    
    @WebServlet("/FileUpload")
    public class FileUpload extends HttpServlet {
        private static final long serialVersionUID = 1L;
          
        // 上传配置
        private static final int MEMORY_THRESHOLD   = 1024 * 1024 * 3;  // 3MB
        private static final int MAX_FILE_SIZE      = 1024 * 1024 * 40; // 40MB
        private static final int MAX_REQUEST_SIZE   = 1024 * 1024 * 50; // 50MB
       
        public FileUpload() {
            super();
        }
        
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            
               if (!ServletFileUpload.isMultipartContent(request)) {
                // 如果不是则停止
                out.println("Error: 表单必须包含 enctype=multipart/form-data");
                out.flush();
                return;
            }
            
            // 配置上传参数
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
            factory.setSizeThreshold(MEMORY_THRESHOLD);
            // 设置临时存储目录
            factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
     
            ServletFileUpload upload = new ServletFileUpload(factory);
             
            // 设置最大文件上传值
            upload.setFileSizeMax(MAX_FILE_SIZE);
             
            // 设置最大请求值 (包含文件和表单数据)
            upload.setSizeMax(MAX_REQUEST_SIZE);
            
            // 中文处理
            upload.setHeaderEncoding("UTF-8"); 
            
            String uploadPath = request.getServletContext().getRealPath("/files");
            File uploadDir = new File(uploadPath);
            if (!uploadDir.exists()) {
                uploadDir.mkdir();
            }
            
            try {
                // 解析请求的内容提取文件数据
                List<FileItem> formItems = upload.parseRequest(request);
                if (formItems != null && formItems.size() > 0) {
                    // 迭代表单数据
                    for (FileItem item : formItems) {
                        // 处理不在表单中的字段
                        if (!item.isFormField()) {
                            String fileName = new File(item.getName()).getName();
                            String filePath = uploadPath + File.separator + fileName;
                            File storeFile = new File(filePath);
                            // 在控制台输出文件的上传路径
    //                        System.out.println(filePath);
                            // 保存文件到硬盘
                            if(storeFile.exists()) {
                                out.println("上传失败,文件已存在!");
                            }else {
                                item.write(storeFile);
                                out.println("文件上传成功!");
                            }    
                        }
                    }
                }
            } catch (Exception ex) {
                response.getWriter().println("文件上传成功!");
            }
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    二.下载:

    1.下载链接:

    "FileDownload?filename="+URLEncoder.encode(filename,"utf-8")      --------- 需要对URL中的中文参数进行编码,否则会出现乱码

    2.后台:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.URLEncoder;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/FileDownload")
    public class FileDownload extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        public FileDownload() {
            super();
        }
        
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            PrintWriter out = response.getWriter();
            
            String dirPath = request.getServletContext().getRealPath("/files");
            String filename = request.getParameter("filename");
    //        System.out.println(filename);
            String filepath = dirPath + File.separator + filename;
            //设置返回的数据类型
            response.setContentType("APPLICATION/OCTET-STREAM");
            //设置请求头,并告诉浏览器文件的名字(filename)。其中文件的名字需要经过编码,否则会出现乱码
            response.setHeader("Content-Disposition", "attachment; filename="" + URLEncoder.encode(filename,"utf-8") + """);
    
            FileInputStream fileInputStream = new FileInputStream(filepath);
            int i = 0;
            while ((i = fileInputStream.read()) != -1) {
                out.write(i);
            }
            fileInputStream.close();
            out.close();
        }
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
  • 相关阅读:
    HDU2027 统计元音 一点点哈希思想
    湖南工业大学第一届ACM竞赛 数字游戏 字符串处理
    湖南工业大学第一届ACM竞赛 我素故我在 DFS
    HDU3293sort
    HDU2082 找单词 母函数
    HDU1018 Big Number 斯特林公式
    湖南工业大学第一届ACM竞赛 分糖果 位操作
    UVA 357 Let Me Count The Ways
    UVA 147 Dollars
    UVA 348 Optimal Array Multiplication Sequence
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/9559185.html
Copyright © 2011-2022 走看看