• ------------------------------------------------------------文件上传和下载文件


    1.-文件上传

    package cn.bdqn.servlet;
    
    import java.io.File;
    import java.io.IOException;
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    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.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    import cn.bdqn.bean.Datail;
    import cn.bdqn.seriver.DatailSeriver;
    import cn.bdqn.seriverImpl.DatailSeriverImpl;
    
    public class AddServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            /**
             + * 文件新增   ===》上传
             + * 
             + * 分析:
             + *01.form表单提交的时候  有文件!enctype="multipart/form-data"
             + *02.针对与文件上传 我们需要引入2个jar
             + *   fileupload 文件上传的jar   依赖于  io.jar
             + *03.我们的form表单中  不只是有文件,还有 普通的 文本输入框
             + *   这时候 我们能  按照同一种方式 进行处理吗???  No!
             + *04.是文件 我们按照文件的方式 处理  
             + *     001.我们怎么知道用户的请求是文件上传类型?
             + *       ServletFileUpload中有一个isMultipartContent(HttpServletRequest)方法
             + *         根据用户的请求  我们可以判断  是否是文件上传类型的请求! 返回 boolean
             + *       
             + *       ServletFileUpload中还有一个重要的方法parseRequest(HttpServletRequest)
             + *        根据用户的请求,会把我们form表单中的每一项(不管是文件还是普通文本都封装成了
             + *        一个FileItem对象,这个方法返回一个所有FileItem的List集合
             + *       
             + *     002.怎么处理文件?
             + *      FileItem 接口 
             + *          中有一系列的方法   可以解析是否是文件还是普通文本!
             + *           getInputStream() 把上传文件加载到内存中                                       输入流
             + *           getOutputStream() 把内存中的数据写入到服务器的文件中                输出流
             + *           
             + *           如果是文件类型,想获取文件名使用 getName()
             + *           如果是普通文本,想获取字段名使用 getFieldName()
             + *          
             + *           怎么知道 是文件 还是 普通字段??
             + *            有一个方法 isFormField()  返回boolean
             + *            true :普通字段
             + *            false:文件
             + *        
             + *       DiskFileItemFactory 核心的实现类  
             + *           可以设置我们缓冲区的大小 setSizeThreshold(int sizeThreshold)  1024*1024          默认大小 10kb
             + *           设置文件临时存放的位置    setRepository(File repository)    new  File("e:	emp")    默认路径System.getProperty("java.io.temdir")
             + *    
             + *   是普通的文本输入框   我们按照普通的方式 处理  
             + *   
             + *   
             + *  实现文件上传的步骤:
             + *  01.创建DiskFileItemFactory对象 设置缓冲区的大小  存放的位置  ,可以不设置 有默认值
             + *  02.通过DiskFileItemFactory对象 创建出 ServletFileUpload  ,就可以知道我们的请求是否是文件上传类型
             + *  03.通过ServletFileUpload对象的  parseRequest方法 获取List<FileItem>
             + *  04.对list集合进行遍历,每遍历一次都要使用FileItem类中的isFormField()来判断是否为文件
             + *      001.普通字段  使用 getFieldName()  和getString() 来获取字段名和字段值
             + *      002.文件   使用getInputStream  getName  getOutputStream*/
        /*    request.setCharacterEncoding("UTF-8");
            Datail datail=new Datail();
            datail.setAuthor(request.getParameter("author"));
            datail.setTitle(request.getParameter("title"));
            datail.setContent(request.getParameter("content"));
            datail.setCreateDate(new Date());
            datail.setPicPath(request.getParameter("picPath"));
            datail.setSummary(request.getParameter("summary"));
             DateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
            try {
                datail.setCreateDate(df.parse(request.getParameter("createDate")));
            } catch (ParseException e) {
                System.err.println("日期格式不正确");
            }
            
            
            DatailSeriver datailSeriver=new DatailSeriverImpl();
            boolean flag = datailSeriver.addDatail(datail);
            if (flag) {
                
                request.getRequestDispatcher("ListServlet").forward(request, response);
            }*/
            
            System.out.println("临时文件的位置"+System.getProperty("java.io.temdir"));
            //因为新增新闻  需要一个新闻对象
            Datail datail=new Datail();
            //01.创建DiskFileItemFactory对象
            DiskFileItemFactory factory=new DiskFileItemFactory();
            //02.通过DiskFileItemFactory对象 创建ServletFileUpload
            ServletFileUpload upload=new ServletFileUpload(factory);
            //判断是不是 文件上传请求
            boolean flag = upload.isMultipartContent(request);
            if (flag) {
                //03.通过ServletFileUpload对象的parseReequest方法获取Lisi<FileItem>
                try {
                    List<FileItem> items = upload.parseRequest(request);
                    //对集合进行遍历 每一次都要使用FileItem类中的isFormFiled()来判断是不是文件
                    Iterator<FileItem> its = items.iterator();
                    while (its.hasNext()) {
                        //获取每一项
                        FileItem item = its.next();
                        if (item.isFormField()) {//普通字段
                            //001.普通字段 使用getFiledName()和getString()来获取字段名和字段值
                            String fieldName = item.getFieldName();
                            if (fieldName.equals("title")) {
                                datail.setTitle(item.getString("UTF-8"));
                            }else if (fieldName.equals("author")) {
                                datail.setAuthor(item.getString("UTF-8"));
                            }else if (fieldName.equals("summary")) {
                                datail.setSummary(item.getString("UTF-8"));
                            }else if (fieldName.equals("createDate")) {
                                datail.setCreateDate(new SimpleDateFormat("MM/dd/yyyy").parse(item.getString("UTF-8")));
                            }else if (fieldName.equals("content")) {
                                datail.setContent(item.getString("UTF-8"));
                            }else if (fieldName.equals("categoryId")) {
                                datail.setCategoryId(Integer.parseInt(item.getString("UTF-8")));
                            }
                        }else {//文件上传
                            //指定文件上传的位置getServletContext 获取的是项目在服务器的位置==》
                            String uploadPath = request.getSession().getServletContext().getRealPath("upload/");
                            File file=new File(uploadPath) ;
                            if (!file.exists()) {//不存在我们创建
                                file.mkdirs();
                            }
                            String fileName  = item.getName();//文件名称
                            if (!fileName .equals("")&&fileName!=null) {//判断用户是否选择了文件上传
                                File uploadFile=new File(fileName);//上传的文件
                                File saveFile=new File(uploadPath, uploadFile.getName());
                                //真正的输出
                                item.write(saveFile);
                                datail.setPicPath(uploadFile.getName());
                            }
                        }
                        
                    }
                    DatailSeriver datailSeriver=new DatailSeriverImpl();
                    boolean flag1 = datailSeriver.addDatail(datail);
                    
                    if (flag1) {
                        request.getRequestDispatcher("ListServlet").forward(request, response);
                    }else {
                        response.sendRedirect("/FindCategoryServlet");
                    }
                } catch (FileUploadException e) {
                    e.printStackTrace();
                } catch (ParseException e) {
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            
            
            }
            
            
        }
        
        
    }

    1.-把上传的文件下载到客户端

    package cn.bdqn.servlet;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class UploadServlet  extends HttpServlet{
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            doPost(req, resp);
        }
    
        @SuppressWarnings("null")
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
               request.setCharacterEncoding("utf-8");
               //获取文件名
               String picPath = request.getParameter("picPath");
            if (picPath!=null||"".equals(picPath.trim())) {
                //获取文件在服务器的目录
               String uploadPath = request.getSession().getServletContext().getRealPath("upload/");
              //拼接真实文件地址
               File saveFile=new File(uploadPath, picPath);
               
               if(saveFile.exists()){  
                    FileInputStream  fis = new FileInputStream(saveFile); 
                    
                    String filename=URLEncoder.encode(saveFile.getName(),"utf-8"); //解决中文文件名下载后乱码的问题  
                    byte[] b = new byte[fis.available()];  
                    fis.read(b);  
                    response.setCharacterEncoding("utf-8");  
                    response.setHeader("Content-Disposition","attachment; filename="+filename+"");  
                    //获取响应输出流对象  
                    ServletOutputStream  out =response.getOutputStream();  
                    //输出  
                    out.write(b);  
                    out.flush();  
                    out.close(); 
                    request.getRequestDispatcher("ListServlet").forward(request, response);
                } else{
                    //如果文件不存在
                    request.getRequestDispatcher("ListServlet").forward(request, response);
                }    
                  
            }else {
                request.getRequestDispatcher("ListServlet").forward(request, response);
            }
        }   
               
        
        
    }
  • 相关阅读:
    如何正确的面对所受到的伤害和不公平--心灵修炼(一)
    27Where条件筛选数据-简单(必学)-天轰穿sqlserver视频教程
    26数据查询的各种小玩法-select 下(必学)-天轰穿sqlserver视频教程
    25数据查询的各种小玩法-select上(必学)-天轰穿sqlserver视频教程
    24单行插入与批量插入-insert(必学)-天轰穿sqlserver视频教程
    23创建与设计表-约束(下)-天轰穿大话数据库视频教程
    22约束-主键与外键(必学)-天轰穿大话数据库视频教程
    21数据表的维护(必学)-天轰穿大话数据库视频教程
    20数据表的创建-分区表(选学)-天轰穿大话数据库视频教程
    19数据表的创建-普通表&临时表-天轰穿大话数据库视频教程
  • 原文地址:https://www.cnblogs.com/laosunlaiye/p/7327539.html
Copyright © 2020-2023  润新知