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+"\t大小:" + 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)

时间: 2024-10-22 04:01:44

JSP/Serlet 使用fileupload上传文件的相关文章

fileUpload上传文件,并设置文件名以及保存服务器位置

我做的是上传Excel文件,保存内容到数据库. 下面部分代码是fileUpload上传文件,并设置文件名以及保存服务器位置. if (fileUpload.HasFile) { string fileNameNo = Path.GetFileName(fileUpload.PostedFile.FileName); //获取文件名和扩展名 fileNameNo = fileNameNo.Replace("(", "-").Replace(")",

FileUpload 上传文件 帮助类

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

asp.net中fileupload上传文件的方法

FileUpload 控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器.用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如,C:\MyFiles\test.txt)来指定要上载的文件.用户也可以通过单击“浏览”按钮,然后在“选择文件”对话框中定位文件来选择文件. 用户选择要上载的文件后,FileUpload 控件不会自动将该文件保存到服务器.您必须显式提供一个控件或机制,使用户能提交指定的文件.例如,可以提供一个按钮,用户单击它即可上载文件

FileUpload 上传文件,并实现c#使用Renci.SshNet.dll实现SFTP文件传输

fileupload上传文件和jquery的uplodify控件使用方法类似,对服务器控件不是很熟悉,记录一下. 主要是记录新接触的sftp文件上传.服务器环境下使用freesshd搭建好环境后,windos环境下可视化工具filezilla可#以很容易实现文件的传输. 本例中主要是c#使用Renci.SshNet.dll实现SFTP文件传输. 代码如下: protected void btnExcelImport_Click(object sender, EventArgs e) { if (

ASP.NET使用FileUpload上传文件

前台代码: Html代码   <asp:FileUpload ID="fuKeleyi" runat="server" /> <asp:Button ID="BtnUp" runat="server" onclick="BtnUp_Click" Text="上 传" /> <asp:Label ID="LabMsg" runat=&quo

asp.net FileUpload上传文件夹并检测所有子文件

1.在FileUpload控件添加一个属性 webkitdirectory=""就可以上传文件夹了 <asp:FileUpload ID="FileUpload1" runat="server" webkitdirectory="" /> 2.检测文件夹下所有子文件 string DirectoryName = FileUpload1.PostedFile.FileName; string path = Serve

fileupload上传文件限制设置

使用fileupload控件上传文件时,当文件大一点的时候就会报错,导致网站崩溃,可以进行如下设置解决问题: 在web.config的system.web节中添加:<httpRuntime executionTimeout="90" maxRequestLength="40960"  appRequestQueueLimit="100"/> executionTimeout 是上传的等待时间.单位是秒 maxRequestLength

使用UpdatePanel时FileUpload失效的问题!【FileUpload上传文件失败】

1.使用UpdatePanel后,FileUpload的HasFile始终为false,无论你是否选中了上传文件! 方案一:设置ScriptManager 的EnablePartialRendering="false" 即可! 缺点:同一个页面上的多个UpdatePanel不可以独自刷新了.另外,当你的UpdatePanel中存在Validator (验证控件)的话,会造成整个页面postback <asp:ScriptManager ID="ScriptManager

FileUpLoad上传文件--[Asp.Net]

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.Security; namespace WebApplication1 { public partial class import : System.Web.UI.Page { prote