• 文件上传下载


    一.上传

    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);
        }
    }
  • 相关阅读:
    MS CRM 2011 RC中的新特性(4)——活动方面之批量编辑、自定义活动
    最近的一些有关MS CRM 2011的更新
    MS CRM 2011 RC中的新特性(6)——连接
    MS CRM 2011 RC中的新特性(7)—仪表板
    参加MS CRM2011深度培训课程——第一天
    MS CRM 2011插件调试工具
    MS CRM2011实体介绍(四)——目标管理方面的实体
    MS CRM 2011 RC中的新特性(3)——客户服务管理方面
    MS CRM 2011 RC中的新特性(8)—数据管理
    ExtAspNet 登陆
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/9559185.html
Copyright © 2020-2023  润新知