使用angular js post到django后端会产生414错误

时间:2018-12-22 11:06:01

标签: angularjs django

        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]);

我正尝试使用angular js将图像发送到django后端,如您在上面看到的,但是后端出现错误,提示:

[22 / Dec / 2018 12:59:34]“ POST / dynamic-mosaic / rs / submit HTTP / 1.1” 200 4

[22 / Dec / 2018 12:59:34]代码414,消息请求URI太长

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

我认为POST可以发送几乎任何大小的请求,该图像甚至不像1-2MB那样大

有人知道原因吗?也许我没有正确使用angular js $ http服务。

1 个答案:

答案 0 :(得分:2)

保存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(...)

可能您还应该考虑使用similar answer

UPD:这是一个外部resource供您考虑

  

Angular的默认transformRequest函数将尝试序列化   我们的FormData对象,所以我们用identity函数覆盖它以   保持数据不变。

     

Angular用于POST的默认Content-Type标头   PUT请求是application / json,因此我们也要更改它。   通过设置“ Content-Type”:未定义,浏览器将   内容类型为我们的multipart / form-data并填写正确   边界。手动设置“内容类型”:multipart / form-data将   无法填写请求的边界参数。