2014-10-09 92 views
1

我正在開發一個使用Java的web應用程序。在我的索引頁面上,我需要使用輸入標籤上傳包含其他字段的文件,例如一些文本和數字。使用jsp和servlet上傳文件

這是我的jsp文件。

<select name="category"> 
    <option value="">-Select-</option> 
    <option value="Mobile Phones">Mobile Phones</option> 
    <option value="Automobile">Automobile</option> 
    <option value="Computers">Computers</option> 
</select><br/><br/> 

<label>Title: </label><input type="text" name="Title"/><br/><br/> 
<label>Photo: </label><input type="file" name="photo"/><br/><br/> 
<label>Description: </label><input type="text" name="description"/><br/><br/> 
<label>Price: </label><input type="text" name="price"/><br/><br/> 
<input type="submit" value="Post"> 

我發現了一些文章,其使用Apache commons,但所有這一切,我可以得到只有圖像。所有其他值都設置爲null。我遵循的文章是this。 我需要知道如何獲得其他值。 (在這種情況下類別,標題,照片等) 我該怎麼做? 謝謝!

編輯: 這是我的servlet。

import java.io.File; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.List; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.MultipartConfig; 
import javax.servlet.annotation.WebServlet; 
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.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 

import com.im.dao.PostAdDao; 
import com.im.dao.PostAdDaoImpl; 
import com.im.entities.Advertiesment; 



@WebServlet("/postAd") 
@MultipartConfig 
public class PostAdServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    private final String UPLOAD_DIRECTORY = "C:/uploadss"; 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     Advertiesment ad = new Advertiesment(); 
     PostAdDao pad = new PostAdDaoImpl(); 
     PrintWriter out = response.getWriter(); 

     String name = null; 


     if(ServletFileUpload.isMultipartContent(request)){ 
      try { 
       List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 

       for(FileItem item : multiparts){ 
        if(item.isFormField()){ 


         String cat = request.getParameter("category"); 
         System.out.println("INFO: Category : "+cat); 

         if(cat != null){ 
          ad.setCategory(cat); 

         } 
         String title = request.getParameter("adTitle"); 
         if(title != null){ 
          ad.setTitle(title); 
          System.out.println("INFO: Title : "+title); 
         } 

         String des = request.getParameter("description"); 
         if(des != null){ 
          ad.setDescription(des); 
          System.out.println("INFO: Description : "+des); 
         } 
         try{ 
         Double price = Double.parseDouble(request.getParameter("price")); 
         if(price != null){ 
          ad.setPrice(price); 
          System.out.println("INFO: Price : "+price); 
         } 
         }catch(Exception e){ 
          System.out.println("ERROR: Occured while setting price in servlet"); 
         } 



        }else{ 

         name = new File(item.getName()).getName(); 
         item.write(new File(UPLOAD_DIRECTORY + File.separator + name)); 

        } 
       } 

       //File uploaded successfully 
       request.setAttribute("message", "Advertiesment Posted Successfully"); 
       System.out.println("INFO: Advertiesment Posted Successfully"); 
       System.out.println("INFO: File name : "+name); 
       ad.setPhoto(name); 
      } catch (Exception ex) { 
       request.setAttribute("message", "File Upload Failed due to " + ex); 
       System.out.println("\nERROR: Occured while posting the advertiesment! "+ex); 
      }   

     }else{ 
      //request.setAttribute("message","Sorry this Servlet only handles file upload request"); 
     } 

     //request.getRequestDispatcher("/result.jsp").forward(request, response); 


     String msg = pad.postAd(ad); 


    } 



} 

回答

1

我發現了一些文章,其使用Apache公地,但所有這一切,我 只能得到圖像

沒有。您也可以從請求中獲得其他物品。

DiskFileUpload upload = new DiskFileUpload(); 
List<FileItem> items = upload.parseRequest(request); 
    for (FileItem item : items) { 
     if (item.isFormField()) { 
       //get form fields here 
     } 
     else { 
        //process file upload here 
      }} 

閱讀文檔here瞭解更多關於這一點,也是一個很好的線程在這裏values of input text fields in a html multipart form

更新:

String cat = item.getFieldName("category"),而不是request.getParameter("category");

因爲你解析請求對象。所以你需要從FileItem中得到它的對象。對於其他領域也是如此。

+0

我剛剛通過添加文章鏈接編輯了問題。在這種情況下所有其他值設置爲空。我發現了一些其他的文章,但他們都幾乎相同。 – vigamage 2014-10-09 09:58:59

+0

將更新我的答案嘗試 – 2014-10-09 10:02:23

+0

它沒有工作,我會在這裏發佈我的servlet在這個問題。你能檢查一下嗎? – vigamage 2014-10-09 15:23:47