有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将带有多个参数的图像上载到servlet

我想使用带有POST方法的HTMLformServlet上传图像和多个字段。一旦收到数据,数据将存储到数据库中。我搜索了,但只找到了只上传文件或字段的解决方案

例如:

  • 文件:图像
  • 字段:图像ID
  • 字段:图像名称

如何创建formServlet来实现这一点


共 (2) 个答案

  1. # 1 楼答案

    基本上,您需要一个multipart/form-dataHTML表单来将数据发布到servlet示例:

    <form action="file-upload" method="post" enctype="multipart/form-data" >
        <table>
            <tr>
                <td><input type="text" name="field1" /></td>
            </tr>
            <tr>
                <td><input type="file" name="file1" /></td>
            </tr>
            <tr>
                <td><input type="submit" value="Send" /></td>
            </tr>
        </table>
    </form>
    

    请注意,您必须更改action属性才能发布到正确的URL,请注意您的应用程序上下文

    现在是servlet部分,有很多方法可以做到这一点,但一个简单的方法是使用Apache Commons FileUpload库。您只需要将JAR添加到您的项目中

    下面是一个以HTML格式获取信息和打印内容的示例:

    @WebServlet(urlPatterns = { "/file-upload" } )
    public class FileUpload extends HttpServlet
    {
        @Override
        public void doPost(HttpServletRequest p_oRequest, HttpServletResponse p_oResponse) throws IOException
        {
            PrintWriter out = p_oResponse.getWriter();
    
            out.println("<html><body>");
    
            List fileItems = null;
    
            // Parsing field values
            DiskFileItemFactory factory = new DiskFileItemFactory();
            factory.setSizeThreshold(10000000);
    
            // Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload(factory);
            // maximum file size to be uploaded.
            upload.setSizeMax(10000000);
    
            try
            {
                // Parse the request to get file items.
                fileItems = upload.parseRequest(p_oRequest);
    
                // Process the uploaded file items
                Iterator i = fileItems.iterator();
    
                out.println("<table><tr><td>Type</td><td>Name</td><td>Value</td>");
    
                while(i.hasNext())
                {
                    FileItem fi = (FileItem)i.next();
    
                    out.println("<tr>");
    
                    if(fi.isFormField())
                    {
                        out.println("<td>Field</td>");
                        out.println("<td>" + fi.getFieldName() + "</td>");
                        out.println("<td>" + fi.getString() + "</td>");
                    }
                    else
                    {
                        out.println("<td>File</td>");
                        out.println("<td>" + fi.getFieldName() + "</td>");
                        out.println("<td>" + fi.getName() + " / " + fi.getContentType() + " / " + fi.getSize() + "</td>");
                    }
    
                    out.println("</tr>");
                }
    
                out.println("</table>");
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
    
            out.println("</body></html>");
            out.flush();
        }
    }
    

    注意FileItem fi是包含字段信息的对象。对于该文件,您可以使用fi.getInputStream()fi.getString()获取其内容,具体取决于您想要获取它的方式和数据量等

  2. # 2 楼答案

    您可以创建一个formdata对象并填充它,如图所示here 并稍后作为请求参数重试,如String message = request.getParameter("message");