• apache的commons-fileupload实现文件上传,下载


    package com.handson.bbs.servlet;

    import java.io.File;

    import java.io.IOException;

    import java.util.Date;

    import java.util.List;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    importjavax.servlet.http.HttpServletResponse;

    import javax.servlet.http.HttpSession;

    importorg.apache.commons.fileupload.FileItem;

    importorg.apache.commons.fileupload.disk.DiskFileItemFactory;

    importorg.apache.commons.fileupload.servlet.ServletFileUpload;

    import com.handson.bbs.bo.UserBO;

    import com.handson.bbs.model.User;

    /** *//**

     ***********************************************

     *@description 文件上传

     *                 针对本项目,上传图片在uploadFile/Image

     *                         缓存目录 c:\tmp\ 目录下

     *                 照片上传后,后面代码处理及时更新用户照片。

     *@author Gavin.lee

     *@date 2009-6-13 21:35:47

     *@version 1.0

     ***********************************************

     */

    public class UploadPhotoServlet extendsHttpServlet{

       public void doGet(HttpServletRequest request, HttpServletResponseresponse)

               throws ServletException, IOException {

           this.doPost(request, response);

           

        }

       public void doPost(HttpServletRequest request, HttpServletResponseresponse)

               throws ServletException, IOException {       

           String filepath =this.getServletContext().getRealPath("/uploadFile/Image/");    //容器相对路径

           

           File tmp = new File("c:\tmp\");

           if(! tmp.exists()) {

               tmp.mkdirs();

           }

           DiskFileItemFactory factory = new DiskFileItemFactory();    //创建磁盘工厂

           factory.setRepository(tmp);    //文件缓存路径

           factory.setSizeThreshold(10 * 1096 );

           ServletFileUpload sfu = new ServletFileUpload(factory);        //创建处理工具

           sfu.setSizeMax(10*1024*1024); //服务器端可以接收的最大文件大小,-1表示无上限

           String filename = null;

           try {

               List<FileItem> list = sfu.parseRequest(request);        //解析

               FileItem item= list.get(0);

                filename = item.getName();

               if(filename.equals("")) {

                   request.getRequestDispatcher("/com/visualizePhoto.jsp").forward(request,response);

                    return ;

               }           

               int pos = filename.lastIndexOf(".");                    //取图片文件格式

               if(pos > 0) {

                    Date date = new Date();

                    filename =filepath+'/'+date.getTime()+filename.substring(pos);

               }

               item.write(new File(filename));   //写到磁盘

           } catch(Exception e) {

               e.printStackTrace();

           }

           

           // 只针对文件上传的话,后面代码不用看了,后面是针对及时更新用户信息(照片)

           HttpSession session = request.getSession();

           User user = (User)session.getAttribute("user");       

           int pos = filename.indexOf("uploadFile");    //设置图片相对路径

           if(pos > 0) {

               filename =filename.substring(pos,pos+10)+'/'+filename.substring(pos+11);

           }

           user.setPhoto(filename);

           

           UserBO userBo = UserBO.getInstance();

           if(userBo.updateUser(user)){

               session.setAttribute("user", user);

               request.getRequestDispatcher("/com/visualizePhoto.jsp").forward(request,response);

           }

        }

    }

    【download】

    下载似乎就更简单了, packagecom.Gavin.tools.fileupload;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.PrintWriter;

    import javax.servlet.ServletConfig;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    importjavax.servlet.http.HttpServletRequest;

    importjavax.servlet.http.HttpServletResponse;

    public class FileDownloadServlet extendsHttpServlet {

       public void doPost(HttpServletRequest request, HttpServletResponseresponse)

               throws ServletException {

           String filename = request.getParameter("file_name");

           

           if (filename == null)

               filename = "";

           

            filename = filename.trim();

           InputStream inStream = null;

           String attchname = "";

           byte[] b = new byte[100];

           int len = 0;

           try {           

               attchname = getAttachName(filename);   //取得附件的名称

               filename =getRealName(request, filename);    //取得附件的全路径

               

               if (filename == null) {

                    System.out.println("文件不存在,或者禁止下载");

                    return;

               }

               attchname = toUtf8String(attchname);   //将文件转码 UTF-8

               inStream = new FileInputStream(filename);

               response.reset();    //必须reset,否则会出现文件不完整

               

               response.setContentType("application/x-msdownload");

               response.addHeader("Content-Disposition", "attachment;filename=""    + attchname +""");

               

               //循环取出流中的数据

               while ((len = inStream.read(b)) > 0) {

                   response.getOutputStream().write(b, 0, len);

                }

               inStream.close();

               

           } catch (Exception e) {

               e.printStackTrace();

           }

        }

       //取得附件的名称

       public static String getAttachName(String filename) {

           if (filename == null)

               return "";

           filename = filename.trim();

           int pos = 0;

           

           pos = filename.lastIndexOf("\");       

           if (pos > -1) {

               filename = filename.substring(pos + 1);

           }       

           

           pos = filename.lastIndexOf("/");       

           if (pos > -1) {

               filename = filename.substring(pos + 1);

           }

           

           pos = filename.lastIndexOf(File.separator);       

           if (pos > -1) {

               filename = filename.substring(pos + 1);

           }

           

           return filename;

        }

       //UTF8转码

       public static String toUtf8String(String string) {

           StringBuffer sb = new StringBuffer();

           for (int i = 0; i < string.length(); i++) {

               char c = string.charAt(i);

               if (c >= 0 && c <= 255) {

                    sb.append(c);

               } else {

                    byte[] b;

                    try {

                        b =Character.toString(c).getBytes("utf-8");

                    } catch (Exception ex) {

                       System.out.println(ex);

                        b = new byte[0];

                    }

                    for (int j = 0; j <b.length; j++) {

                        int k = b[j];

                        if (k < 0)

                            k += 256;

                        sb.append("%" +Integer.toHexString(k).toUpperCase());

                    }

               }

           }

           String s_utf8 = sb.toString();

           sb.delete(0, sb.length());

           sb.setLength(0);

           sb = null;

           return s_utf8;

        }

       //取得下载文件的真实全路径名称

       private String getRealName(HttpServletRequest request, String filename){

           if (request == null || filename == null)

               return null;

           filename = filename.trim();

           if (filename.equals(""))

                return null;

           String filepath = request.getRealPath(filename);

           if (filepath == null)

               return null;

           File file = new File(filepath);

           if (!file.exists())

               return null;

           return filepath;

        }

       public void doGet(HttpServletRequest request, HttpServletResponseresponse)

               throws ServletException {       

           this.doPost(request, response);

        }

    }

  • 相关阅读:
    jsonp 跨域解决 spring
    goEasy消息推送,pushlet 向特写用户实时推送
    支持中文加密解密
    webservice 小小例子
    DES加密
    线程、异步
    mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释
    Log4j按级别输出到不同文件
    niginx 负载均衡
    node-webkit安装及简单实现
  • 原文地址:https://www.cnblogs.com/liaoshiyong/p/3150823.html
Copyright © 2020-2023  润新知