2014-10-09 71 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