Как отправить POST-запрос с multipart / form-data, используя angularJS?

0

Раньше я спрашивал что-то подобное, но здесь есть несколько разные случаи и более подробные сведения.

У меня есть обработчик на стороне сервера, который принимает запросы POST multipart/form-data. Запрос содержит количество параметров POST и еще один параметр, который должен содержать файл изображения (этот последний параметр может существовать или не существовать). Как отправить такие запросы с помощью angularJS?

Я попробовал количество опций (все они знают без загрузки файлов), но никто из них не работает. Я получаю неправильный результат, потому что отсутствие Content-Type: multipart/form-data в HTTP-запросе или получение исключения из приложения Spark для веб-служб на основе Jetty (просьба не путать с Apache Spark), которая звучит как "... "Отсутствует начальная граница нескольких частей..." - в зависимости от деталей запроса.

Я пробовал это:

return $http({
            method: 'POST',
            url: editCompanyUrl,
            headers: {'Content-Type': 'multipart/form-data'},
            data: {
                token: token,
                userId: userId,
                companyId: companyId,
                companyName: $scope.companyName,
            },
            timeout: 500
        }).then(function (data) {
            console.log(data);
            //Store Company ID which is used for saving purposes
            //localStorage.setItem("companyId", data.data.Company.id);
            return data.data.Company;
        }, function (data) {
            console.log(data);
        })

и это, например

return $http({
            method: 'POST',
            url: editCompanyUrl,
            headers: {'Content-Type': undefined},
            data: {
                token: token,
                userId: userId,
                companyId: companyId,
                companyName: $scope.companyName,
            },
            timeout: 500
        }).then(function (data) {
            console.log(data);
            //Store Company ID which is used for saving purposes
            //localStorage.setItem("companyId", data.data.Company.id);
            return data.data.Company;
        }, function (data) {
            console.log(data);
        })

Не могли бы вы помочь? Каков правильный способ отправки многостраничных запросов?

Спасибо.

С уважением, Артем.

Теги:

2 ответа

0

Можете ли вы показать нам полную ошибку. А также ваш код на стороне сервера. Чтобы получить содержание нескольких частей в Spark, вы должны использовать это на своей стороне сервера:

  MultipartConfigElement multipartConfigElement = new MultipartConfigElement("Yourstoragedirectory");
  request.raw().setAttribute("org.eclipse.jetty.multipartConfig", multipartConfigElement);
  System.out.println(request.raw().getPart("file"));

Также убедитесь, что у вас есть последняя версия искры.

0

$ http предоставляет опцию: params.

Использовать параметры: вместо данных:

        $http({
            url: url,
            method: "POST",
            params: {
             token: token,
             userId: userId,
             companyId: companyId,
             companyName: $scope.companyName,
           },
        }).success(function(data, status, headers, config) {
            //SUCCESS
          }).
        error(function(data, status, headers, config) {
            //ERROR
       });
  • 0
    Привет, Николас! Спасибо за ответ, но как добавить поддержку multipart / form-data? И иногда (в зависимости от вариантов кода) перед POST возникает дополнительный запрос OPTIONS (насколько я понимаю, он связан с CORS) - как его избежать? Спасибо.
  • 0
    Эй @ АртемВоробьев, во-первых, это работает сейчас? И затем, OPTIONS - это то, как стандарт Cross-Origin Resource Sharing предписывает браузерам вести себя, это не ошибка :)! Что бы вы хотели избежать этого?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню