【问题标题】:uploading files using jsp and servlet使用jsp和servlet上传文件
【发布时间】:2014-12-04 05:02:56
【问题描述】:

我正在使用 Java 开发 Web 应用程序。我需要从我的索引页面上传一个包含其他字段的文件,例如使用输入标签的一些文本和数字。

这是我的 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 的文章,但在所有这些中,我只能得到图像。所有其他值都设置为空。我关注的文章是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);


    }



}

【问题讨论】:

    标签: java apache jsp servlets apache-commons


    【解决方案1】:

    我发现了一些使用 Apache commons 的文章,但在所有这些文章中,我 只能获取图片

    没有。您也可以从请求中获取其他项目。

    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 object 获取它。其他领域也是如此。

    【讨论】:

    • 我刚刚通过添加文章链接来编辑问题。在那种情况下,所有其他值都设置为空。我找到了一些其他的文章,但几乎都是一样的。
    • 它不起作用,我将在问题中发布我的 servlet。你能检查一下吗?
    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 2013-12-09
    • 2013-01-11
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2018-10-15
    • 2014-03-21
    相关资源
    最近更新 更多