【问题标题】:Multipart/form-data how to get parameter hidden [duplicate]Multipart / form-data如何隐藏参数[重复]
【发布时间】:2013-12-29 16:22:49
【问题描述】:

我正在开发一个网络应用程序。我的 jsp 带有 enctype="multipart/form-data",当我提交请求时,我无法在 servlet 中获取请求参数。

getParameter() 调用都将返回 null。问题是如何克服这个问题?

当它没有被加密时,这段代码可以正常工作。我知道这已经被问过很多次了,但我没有找到任何直接的答案

JSP

<form action="upload" method="post" enctype="multipart/form-data">
                <input type="file" name="uploadfile[]" id="uploadfile" size="50" multiple="true" />
                <br/><br/>
                <input type="hidden" name ="e_id" value= <%=userBean.getEid%> />
                <input type="hidden" name ="Uid" value= <%=userBean.getUid()%> />
                <input type="submit" name ="button1" value="Upload" />
            </form>

Servlet

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

    int e_id =0;
    String uid = null;

    HttpSession session1 = request.getSession(true);    
    if(ServletFileUpload.isMultipartContent(request)){//process only if its multipart content
        try 
        {
          List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
          for(FileItem item : multiparts)
          {
              if(!item.isFormField())
              {
                    String name = new File(item.getName()).getName();
                    item.write( new File(UPLOAD_DIRECTORY + File.separator + name));

                    e_id = Integer.parseInt(request.getParameter("e_id"));
                    uid = request.getParameter("Uid");
              }
              else {}
...

【问题讨论】:

  • 数据隐藏在请求InputStream中。签出this
  • else {} 块中 - 当item.isFormField()
  • @NikosParaskevopoulos 有趣的方法,但变量 map 仅返回此Content-Disposition: form-data; name="uploadfile[]"; filename},因此我无法使用map.get("id"),这可能是我的问题的解决方案。
  • @IanRoberts 不,它在 else{} 块中也不起作用。

标签: java jsp servlets input multipartform-data


【解决方案1】:

您需要使用 @MultipartConfig 注释您的 servlet 并获取您使用的参数的值:

Part idPart = req.getPart("e_id");
try (Scanner scanner = new Scanner(idPart.getInputStream())) {
    String idValue = idPart.nextLine(); // read from the part
} 

我在 github 上有一个project,并附有如何使用它的示例:

【讨论】:

    猜你喜欢
    • 2016-01-29
    • 2013-07-30
    • 1970-01-01
    • 2021-11-21
    • 2014-10-31
    • 2019-12-30
    • 2017-08-04
    • 2012-03-28
    • 2018-12-01
    相关资源
    最近更新 更多