Использование углового js post для django back end приводит к ошибке 414 - PullRequest
0 голосов
/ 22 декабря 2018
        var reader = new FileReader();
        reader.onload = function(){
            var fileData = reader.result;

            $http({
                url: 'rs/submit',
                method: 'POST',
                data: {
                    'img': fileData,
                    'query': query,
                    'limit': limit
                }
            })
            .then(function successCallback(response) {

            }, function errorCallback(response) {

            });
        };
        reader.readAsDataURL(document.getElementById('submitFileInput').files[0]);

Я пытаюсь отправить изображение на мою серверную часть django, используя угловой js, как вы можете видеть выше, но я получаю ошибку на серверной стороне, которая говорит:

[22 декабря/ 2018 12:59:34] "POST / dynamic-mosaic / rs / submit HTTP / 1.1" 200 4

[22 / Dec / 2018 12:59:34] код 414, сообщение Request-URI Too TooLong

[22 / Dec / 2018 12:59:34] "" 414 -

Я думал, что POST может отправлять запросы практически любого размера, изображение даже такого большого размера, как 1-2 МБ

Кто-нибудь знает причину?Может быть, я не использую сервис angular js $ http.

1 Ответ

0 голосов
/ 22 декабря 2018

Сохранение Blob тип немного отличается

var fd = new FormData();
fd.append('img', reader.result);
fd.append('query', query);
fd.append('limit', limit);

$http.post('rs/submit', fd, {
    transformRequest: angular.identity,
    headers: {'Content-Type': undefined}
}).then(...)

Вероятно, вы также должны рассмотреть аналогичный ответ

UPD: здесь есть внешний ресурс на ваше рассмотрение

Функция Angular по умолчанию transformRequest попытается сериализовать наш объект FormData, поэтому мы переопределяем его функцией идентификации, чтобы оставить данные нетронутыми.

Angular'sзаголовок Content-Type для запросов POST и PUT по умолчанию - application / json, поэтому мы тоже хотим это изменить.Установив «Content-Type»: не определено, браузер устанавливает для нас Content-Type multipart / form-data и заполняет правильную границу.Установка «Content-Type» вручную: multipart / form-data не сможет заполнить граничный параметр запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...