Анкета AngularJs Ajax POST с загрузкой файла

Я пытаюсь настроить форму для отправки с использованием ajax-запроса на api, который уже был создан с использованием Ajax. По какой-то причине файл просто не хочет переходить в систему, хотя для его обработки уже создан задний конец, и он отлично работает.

Моя служба выглядит так на основе учебника, который я нашел здесь: http://badwing.com/multipart-form-data-ajax-uploads-with-angularjs/

    addActivity: function(url){
        return $http({
            method: 'POST',
            url: REQUEST_URL + 'Volunteering/AddActivity?token=' + token + url,
            headers: {
                'Content-Type': 'multipart/form-data'
            },
            data: {
                file: $scope.file
            },
            transformRequest: formDataObject
        }).
        then(function(result) {
            console.log(result);
            return result.data;
        });
    },

У меня есть ощущение, что это просто что-то действительно незначительное, что я пропал без вести, может ли кто-нибудь помочь?

Ответ 1

У меня возникла аналогичная проблема.

Решение заключается в использовании formData​​p >

var formData = new FormData();
formData.append("file", $scope.file);

и замените

data: {
            file: $scope.file
        }

с

data: {
            formdata
        }

Ответ 2

У меня возникли проблемы с загрузкой файлов с помощью angular + laravel. Каждый раз, когда я пытался отправить многостраничную форму, сервер не получал данные формы, даже если бы он был явно отправлен, или так я думал. Я, наконец, нашел ЭТУ статью, которая решила все мои проблемы.

Короче говоря, это вызов $http:

var data = new FormData();

data.append("file", file);

$http.post("//myDomain.com/api/demo", data, {
    headers: { 'Content-Type': undefined },
    transformRequest: angular.identity
}).success(function (data, status, headers, config) {

}).error(function (data, status, headers, config) {

});

Другой ответ rolin.tencent.Shenzhen также упомянул установку Content-Type как undefined, чтобы браузер разобрался.

Ответ 3

Данные должны быть data: $scope.file

и важная вещь: вы должны установить 'Content-Type': undefined, чтобы браузер установил правильный тип контента.