Java Servlet 接收上傳文件

在Java中使用 Servlet 來接收用戶上傳的文件,須要用到兩個apache包,分別是 commons-fileupload 和 commons-io 包;html

若是直接在doPost中,使用request.getInputStream()獲取ServletInputStream,這樣獲取到的Stream是不能直接寫入文件的,好比上傳一個txt文件,你會發現保存下來的txt文件不僅有本來txt文件自己的內容,裏面還有post請求的一些參數,好比參數分割符等;apache

下面就是一個使用fileupload包來接收文件內容的例子:ide

public class FileServlet extends HttpServlet {
    /**
     * 
     */
    private static final long serialVersionUID = -4187075130535308117L;
    private boolean isMultipart;
    private int maxFileSize = 1024 * 1024 * 10;
    private int maxMemSize = 100 * 1024;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 檢查是否有一個文件上傳請求
        isMultipart = ServletFileUpload.isMultipartContent(request);
        String result = "";
        response.setContentType("text/html;charset=utf-8");
        if (!isMultipart) {
            result = "未獲取到文件";
            response.getWriter().println(result);
            return;
        }
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 文件大小的最大值將被存儲在內存中
        factory.setSizeThreshold(maxMemSize);
        // Location to save data that is larger than maxMemSize.
        String path = getServletContext().getRealPath("/") + "/";
        factory.setRepository(new File(path));
        // System.out.println(path);
        // 建立一個新的文件上傳處理程序
        ServletFileUpload upload = new ServletFileUpload(factory);
        // 容許上傳的文件大小的最大值
        upload.setSizeMax(maxFileSize);

        try {
            // 解析請求,獲取文件項
            List fileItems = upload.parseRequest(request);
            // 處理上傳的文件項
            Iterator i = fileItems.iterator();
            while (i.hasNext()) {
                FileItem fi = (FileItem) i.next();
                if (!fi.isFormField()) {
                    // 獲取上傳文件的參數
                    String fieldName = fi.getFieldName();
                    String fileName = fi.getName();
                    String contentType = fi.getContentType();
                    boolean isInMemory = fi.isInMemory();
                    long sizeInBytes = fi.getSize();
                    // 寫入文件
                    File file = new File(path + System.currentTimeMillis() / 1000 + ".py");
                    fi.write(file);
                }
            }
            result = "上傳成功";
        } catch (Exception ex) {
            System.out.println("ex:" + ex.getMessage());
            result = "上傳失敗";
        }

        response.getWriter().println(result);
    }
}

接下來,在html頁面中,能夠經過在一個表單中來提交上傳文件post

    <form action="fileUpload" enctype="multipart/form-data" method="post">
        <input type="file" name="file"></input> <input type="submit"
            value="提交"></input>
    </form>
相關文章
相關標籤/搜索