2010-05-13 29 views

回答

6

開始圖像的圖像,使用JSP選擇要上傳的文件,你至少需要一個HTML元素<input type="file">這將顯示一個文件瀏覽字段。如HTML forms spec中所述,您需要將請求方法設置爲POST,並且請求編碼爲multipart/form-data父代<form>元素。

<form action="upload" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file"> 
    <input type="submit"> 
</form> 

由於上述請求編碼是不是Servlet 3.0之前Servlet API的支持(我不認爲你默認使用的是因爲EJB 3.0的Java EE 5.0的一部分,又包含Servlet 2.5的只有),您在請求參數映射中不會看到任何內容。 request.getParameter("file")將返回null

要檢索上傳的文件和servlet中的其他請求參數,您需要自己解析HttpServletRequestInputStream。幸運的是,有一種常用的API可以從您的手中完成繁瑣的工作:Apache Commons FileUpload

List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 
for (FileItem item : items) { 
    if (!item.isFormField()) { 
     // <input type="file"> 
     System.out.println("Field name: " + item.getFieldName()); 
     System.out.println("File name: " + item.getName()); 
     System.out.println("File size: " + item.getSize()); 
     System.out.println("File type: " + item.getContentType()); 
    } else { 
     // <input type="text|submit|hidden|password|button">, <select>, <textarea>, <button> 
     System.out.println("Field name: " + item.getFieldName()); 
     System.out.println("Field value: " + item.getString()); 
    }    
} 

基本上你只需要從FileItem對象獲得InputStream,並使用通常的Java IO方式,寫入任何OutputStream您的口味。

InputStream content = item.getInputStream(); 

另外,您也可以直接寫:

item.write(new File("/uploads/filename.ext")); 

在他們的網頁上,你可以找到大量的代碼示例和重要提示&技巧在User GuideFrequently Asked Questions部分。仔細閱讀。

+0

非常感謝您的支持!我將學習Commons Fileload,我將嘗試在我的應用中實施,那麼我會回來。 保重! George – George 2010-05-16 18:49:30

+0

+1。因爲'parseRequest()'只是返回一個'List' – 2010-09-18 01:40:25

+0

我已經實現了你的代碼,但是它需要添加@SuppressWarnings(「unchecked」)來處理第一行代碼拋出FileNotFound異常 – Roshan 2013-12-02 15:18:05