【问题标题】:servlet abort multipart form data submission after validation fail验证失败后servlet中止多部分表单数据提交
【发布时间】:2018-12-04 05:57:43
【问题描述】:

我有一个jsp 页面,它允许用户向servlet 提交多部分表单数据。这个多部分表单具有订单 ID 字段和另一个用于上传 1GB 视频的字段。现在在服务器上,我对订单 ID 执行验证以检查订单 ID 是否有效,如果订单 ID 无效,我只需从 doPost 方法返回。现在的问题是,即使我从 doPost 返回此多部分表单数据也会继续发送多部分视频文件,除非它将整个文件上传到 servlet。我只想在订单 ID 验证失败后立即中止此 Multipart 表单提交,而无需等待将整个视频文件上传到 servlet。我尝试使用 abort 方法,但 eclipse 没有显示任何建议。

【问题讨论】:

    标签: java jsp servlets multipartform-data


    【解决方案1】:

    您可以尝试两种解决方案:

    1. 在进一步处理文件之前验证方法第一行的OrderId,如果无效则返回该处。您还可以使用@MultipartConfig(fileSizeThreshold = 1024 * 1024, maxFileSize = 1024 * 1024 * 5, maxRequestSize = 1024 * 1024 * 5 * 5) 添加文件大小验证。我试过了,这行得通!
    2. 添加验证 OrderId onBlur 事件的 Web 服务。这将检查orderId 是否有效。它将减少最初提交的表单。这可以通过在页面上使用AJAX 来完成。

    如果这些没有帮助,请分享您的代码 sn-p,以便我进一步分析。

    【讨论】:

      【解决方案2】:

      您可以尝试这样的方法,首先触发 AJAX 以验证 OrderID,如果您的 servlet 返回“true”,则继续上传您的视频。否则,您将忽略下一个操作。

      var xhttp1 = new XMLHttpRequest();
      xhttp1.open("POST", "YOUR_SERVLET", false);
      xhttp1.onreadystatechange = function () {
          if (xhttp1.readyState == 4) {
              if (xhttp1.status == 200) {
                  if (xhttp1.responseText == 'true') {
      
                      // SEND YOUR 1 GB FILE
                      var xhttp2 = new XMLHttpRequest();
                      xhttp2.open("POST", "YOUR_SERVLET", false);
                      xhttp2.onreadystatechange = function () {
                          if (xhttp2.readyState == 4) {
                              if (xhttp2.status == 200) {
                                  if (xhttp2.responseText == 'true') {
                                      // YOUR VIDEO UPLOADED SUCCESSFULLY
                                  }
                              }
                          }
                      };
                      xhttp2.setRequestHeader("Content-type", "multipart/form-data");
                      xhttp2.send(formData);
      
      
                  } else {
                      // ORDER ID INVALID
                  }
              }
          }
      };
      xhttp1.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xhttp1.send("OrderId=1");
      

      【讨论】:

      • 如果我不想发出 ajax 请求怎么办?如果验证失败,我只想直接向 servlet 提交表单并中止视频上传。
      • 表格只能提交一次,AFAIK 你不能中途中止你的请求。所以这种方法最适合你的情况。
      猜你喜欢
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 2017-09-21
      • 2018-11-08
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      相关资源
      最近更新 更多