Servlet在验证失败后中止多部分表单数据提交。

6

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

2个回答

5

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

  1. 在方法的第一行验证OrderId是否有效,如果无效则返回,此外还可以使用@MultipartConfig(fileSizeThreshold = 1024 * 1024, maxFileSize = 1024 * 1024 * 5, maxRequestSize = 1024 * 1024 * 5 * 5)来添加文件大小验证。我已经尝试过了,这种方法是有效的!
  2. 添加一个Web服务来验证OrderIdonBlur事件。 这将检查orderId是否有效。 它将减少初始表单提交。 可以使用页面上的AJAX来实现。

如果这些方法都无法解决问题,请分享您的代码片段,以便我进一步分析。


2
你可以尝试这样做:先发送一个AJAX请求来验证订单ID,如果你的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");

2
如果我不想发出ajax请求怎么办?我只想直接将表单提交到servlet,并在验证失败时中止视频上传。 - ashish pandey
表格只能提交一次,据我所知,你不能在中途放弃请求。因此,这种方法最适合你的情况。 - hiren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接