сервлет прервать отправку данных из нескольких частей после сбоя проверки - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть одна страница jsp, которая позволяет пользователю отправлять данные из нескольких частей в сервлет.Эта многочастная форма имеет поле «Код заказа» и другое поле для загрузки видео объемом 1 ГБ.Теперь на сервере я выполняю проверку идентификатора заказа, чтобы проверить, является ли идентификатор заказа действительным или нет. Если идентификатор заказа недействителен, я просто возвращаюсь из метода doPost.Теперь проблема в том, что даже когда я возвращаюсь из doPost, эти данные из многочастной формы продолжают отправлять многочастный видеофайл, пока он не загрузит весь файл в сервлет.Я просто хочу прервать отправку этой многочастной формы, как только проверка идентификатора заказа завершится неудачей, не дожидаясь загрузки всего видеофайла в сервлет.Я пытался использовать метод прерывания, но затмение не показало никаких предложений.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Вы можете попробовать что-то вроде этого, когда вы сначала запускаете AJAX для проверки OrderID, и если ваш сервлет возвращает '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");
0 голосов
/ 17 апреля 2019

Существует два решения, которые вы можете попробовать:

  1. Проверьте OrderId в первой строке метода перед дальнейшей обработкой файла и вернитесь туда, если он недействителен.А также вы можете добавить проверки размера файла, используя @MultipartConfig(fileSizeThreshold = 1024 * 1024, maxFileSize = 1024 * 1024 * 5, maxRequestSize = 1024 * 1024 * 5 * 5).Я пробовал, это работает!
  2. Добавить веб-сервис, который проверяет событие OrderId onBlur.Это проверит, действителен ли orderId или нет.Это уменьшит форму, отправляемую изначально.Это можно сделать с помощью AJAX на странице.

Если это не поможет, пожалуйста, поделитесь фрагментом кода, чтобы я мог проанализировать его дальше.

...