Common FileUpload組件的使用!

只需要寫一個上傳類UploadServlet.java,還需要兩個Jsp界面,分別負責上傳文件和輸出上傳是否成功。

還需要在根目錄下新建一個文件夾uploads,用於保存上傳後文件。

下面是上傳Servlet類源碼:

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

import org.apache.commons.fileupload.*;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;



public class UploadServlet extends HttpServlet {

    private static final long serialVersionUID = -2201219701121037194L;

    private String savePath;

    private ServletContext sc;



    public void init(ServletConfig config) {

        savePath = config.getInitParameter("savePath");

        sc = config.getServletContext();

    }



    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");

        DiskFileItemFactory factory = new DiskFileItemFactory();

        ServletFileUpload upload = new ServletFileUpload(factory);

        try {

            List items = upload.parseRequest(request);// 上傳文件解析

            Iterator itr = items.iterator();// 枚舉方法

            while (itr.hasNext()) {

                FileItem item = (FileItem) itr.next();

                if (item.isFormField()) {// 判斷是文件還是文本信息

                    System.out.println("表單參數名:" + item.getFieldName()

                            + ",表單參數值:" + item.getString("UTF-8"));

                } else {

                    if (item.getName() != null && !item.getName().equals("")) {// 判斷是否選擇了文件

                        System.out.println("上傳文件的大小:" + item.getSize());

                        System.out.println("上傳文件的類型:" + item.getContentType());

                        // item.getName()返回上傳文件在客戶端的完整路徑名稱

                        System.out.println("上傳文件的名稱:" + item.getName());

                        // 此時文件暫存在服務器的內存當中



                        File tempFile = new File(item.getName());// 構造臨時對象

                        File file = new File(sc.getRealPath("/") + savePath,

                                tempFile.getName());

                        // 獲取根目錄對應的真實物理路徑

                        item.write(file);// 保存文件在服務器的物理磁盤中

                        request.setAttribute("upload.message", "上傳文件成功!");// 返回上傳結果

                    } else {

                        request.setAttribute("upload.message", "沒有選擇上傳文件!");

                    }

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

            request.setAttribute("upload.message", "上傳文件失敗!");

        }

        request.getRequestDispatcher("/uploadResult.jsp").forward(request,

                response);

    }

}

齊活
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章