zoukankan      html  css  js  c++  java
  • JSP/Serlet 使用fileupload上传文件

    需要引用的jar

    commons-fileupload-1.3.1.jar

    commons-io-2.2.jar

    index.jsp

      

        <body>  
          <center>  
            <h3>文件上传</h3>  
            <font color="red"><%=request.getAttribute("msg")==null?"":request.getAttribute("msg") %> </font>  
            <form enctype="multipart/form-data" method="post" action="servlet/FileUploadServlet">  
                文件描述:<input type="text" name="text" /><br/>  
                选择文件:<input type="file" name="file1" /><br/>  
                选择文件:<input type="file" name="file2" /><br/>  
                选择文件:<input type="file" name="file3" /><br/>  
                选择文件:<input type="file" name="file4" /><br/>  
                选择文件:<input type="file" name="file5" /><br/>  
                <input type="submit" value="上传" />  
            </form>  
          </center>  
        </body>  

     FileUploadServlet.jsp

        package com.accp.fileupload.servlet;  
          
        import java.io.File;  
        import java.io.IOException;  
        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.FileUploadBase.FileSizeLimitExceededException;  
        import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
        import org.apache.commons.fileupload.servlet.ServletFileUpload;  
          
        public class FileUploadServlet extends HttpServlet {  
          
            private static final long serialVersionUID = 2827297299439162553L;  
          
            public void doGet(HttpServletRequest request, HttpServletResponse response)  
                    throws ServletException, IOException {  
                //使用同一种处理方法  
                doPost(request, response);  
            }  
          
            public void doPost(HttpServletRequest request, HttpServletResponse response)  
                    throws ServletException, IOException {  
                request.setCharacterEncoding("UTF-8");  
                response.setContentType("text/html; charset=UTF-8");  
                  
                //保存路径  
                String savePath = getServletContext().getRealPath("/upload");  
                File saveDir = new File(savePath);  
                // 如果目录不存在,就创建目录  
                if(!saveDir.exists()){  
                    saveDir.mkdir();  
                }  
                  
                // 创建文件上传核心类  
                DiskFileItemFactory factory = new DiskFileItemFactory();  
                ServletFileUpload sfu = new ServletFileUpload(factory);  
                //设置编码  
                sfu.setHeaderEncoding("UTF-8");  
                // 设置上传的单个文件的最大字节数为2M  
                sfu.setFileSizeMax(1024*1024*2);  
                //设置整个表单的最大字节数为10M  
                sfu.setSizeMax(1024*1024*10);  
                  
                try{  
                    // 处理表单请求  
                    List<FileItem> itemList = sfu.parseRequest(request);  
                    for (FileItem fileItem : itemList) {  
                        // 对应表单中的控件的name  
                        String fieldName = fileItem.getFieldName();  
                        System.out.println("控件名称:" + fieldName);  
                        // 如果是普通表单控件  
                        if(fileItem.isFormField()){  
                            String value = fileItem.getString();  
                            //重新编码,解决乱码  
                            value = new String(value.getBytes("ISO-8859-1"),"UTF-8");  
                            System.out.println("普通内容:" + fieldName + "=" + value);  
                        // 上传文件  
                        }else{  
                            // 获得文件大小  
                            Long size = fileItem.getSize();  
                            // 获得文件名  
                            String fileName = fileItem.getName();  
                            System.out.println("文件名:"+fileName+"	大小:" + size + "byte");  
                              
                            //设置不允许上传的文件格式  
                            if(fileName.endsWith(".exe")){  
                                request.setAttribute("msg", "不允许上传的类型!");  
                            }else{  
                                //将文件保存到指定的路径  
                                File file = new File(savePath,fileName);  
                                fileItem.write(file);  
                                request.setAttribute("msg", "上传成功!");  
                            }  
                        }  
                    }  
                }catch(FileSizeLimitExceededException e){  
                    request.setAttribute("msg", "文件太大");  
                }catch(FileUploadException e){  
                    e.printStackTrace();  
                }catch(Exception e){  
                    e.printStackTrace();  
                }  
                //上传完毕后  转发到首页  
                request.getRequestDispatcher("/index.jsp").forward(request, response);  
            }  
          
        }  
    

    注意要采用action 方式提交表单,不要使用 ajax的方式提交表单,否则会有异常信息。

    org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:885)

  • 相关阅读:
    “无法从http://XXX/XXX.svc?wsdl获取元数据”错误的解决方法
    闹洞房小游戏
    第3章 Oracle实例的管理
    公积金余额查询电话
    人要有忧患意识
    第0章 Oracle的安装及相关配置
    第5章 重做日志文件
    oracle体系结构视频学习笔记
    编写存储过程实现查询mysql数据库中的表名并删除表中的数据
    第6章 表空间和数据文件的管理
  • 原文地址:https://www.cnblogs.com/daijinming/p/3950107.html
Copyright © 2011-2022 走看看