验证失败后,servlet放弃多部分表单数据提交

时间:2018-12-04 05:57:44

标签: java jsp servlets multipartform-data

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

2 个答案:

答案 0 :(得分:5)

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

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

如果这些操作无济于事,请分享您的代码段,以便我进一步分析。

答案 1 :(得分: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");