diskFile上传文件

/**  
 *   
 * @author 郑阳文
 *    
 *  使用apache的commons-io-2.4.jar,commons-fileupload-1.2.2.jar完成处理文件上传的Servlet  
 */  
public class UploadServlet extends HttpServlet {   
  
    public void doPost(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
        /**  
         * request.getRealPath("/")返回的是当前项目所在硬盘的路径 如:C:\Program Files\Apache  
         * Software Foundation\Tomcat 6.0\webapps\Struts2_9\  
         * request.getRealPath("/upload")返回的是当前项目所在硬盘的路径+根目录下面的upload的路径  
         * 如:C:\Program Files\Apache Software Foundation\Tomcat  
         * 6.0\webapps\Struts2_9\Upload  
         */  
        String path = request.getRealPath("/upload");   
        DiskFileItemFactory factory = new DiskFileItemFactory();   
        /**  
         * Apache上传组件上传的文件若小于某一值时就将要上面的文件放在内存中,否则就放到一个临时的目录中去。  
         */  
        /**  
         * 设置文件小于多少时放到内存当中去。1024*1024为1M的大小  
         */  
        factory.setSizeThreshold(1024 * 1024);   
        /**  
         * 设置大于上面设置的大小的文件上传时所放的临时目录,上传完成后临时目录所存放的垃圾文件不自动删除。  
         */  
        factory.setRepository(new File(path));   
        /**  
         * ServletFileUpload完成上传的核内类  
         */  
        ServletFileUpload servletUpload = new ServletFileUpload(factory);   
        try {   
            List<FileItem> list = servletUpload.parseRequest(request);   
            for (FileItem item : list) {   
                /**  
                 * 非file字段,即普通的字段  
                 */  
                if (item.isFormField()) {   
                    /**  
                     * 获得字段的名称,即对应页面文本框等的名称  
                     */  
                    String name = item.getFieldName();   
                    /**  
                     * 以gbk方式获得该字段的value值,即对应页面文本框等所输入的值  
                     */  
                    String value = item.getString("gbk");   
  
                    request.setAttribute(name, value);   
                } else {   
                    /**  
                     * file型字段  
                     */  
                    /**  
                     * 获得页面file的名称  
                     */  
                    String name = item.getFieldName();   
                    /**  
                     * 获得页面file中用户选择的文件的路径(与普通的字段不同)  
                     * 由于不同的浏览器所取得值不同,有的得到是所选择文件的路径,有的得到的就是所选择的文件的名称。  
                     * 如:有的浏览器所取得的是:C:\Documents and  
                     * Settings\Administrator\桌面\电话本.txt 有的浏览器所取得的是:电话本.txt  
                     */  
                    String value = item.getName();   
                    /**  
                     * 下面做一个统一的处理 若为文件名则下面没有”\“则start为-1  
                     */  
                    int start = value.lastIndexOf("\\");   
                    String fileName = value.substring(start + 1);   
                    request.setAttribute(name, fileName);   
                    /**  
                     * 下面做上传的处理  
                     */  
                    InputStream is = item.getInputStream();   
                    /**  
                     * 上传的路径依然选择path  
                     */  
                    File UploadFile = new File(path, fileName);   
                    OutputStream os = new FileOutputStream(UploadFile);   
  
                    byte[] buffer = new byte[400];   
                    int length = 0;   
                    while ((length = is.read(buffer)) > 0) {   
                        os.write(buffer, 0, buffer.length);   
                    }   
                    os.close();   
                    is.close();   
                       
                    /**  
                     * 更简单的上传方式  
                     * 无需使用InputStream和OutputStream对象item.write(File)即可  
                     * item.write(UploadFile);  
                     */  
                }   
            }   
        } catch (FileUploadException e) {   
            e.printStackTrace();   
        }   
  
    }   
  
    public void doGet(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
        this.doPost(request, response);   
    }   
}  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值