Django:413(请求实体太大)错误在ajax上传包含文件的Formdata时

时间:2015-07-04 16:08:43

标签: jquery ajax django nginx

我在Django管理员中工作,我已经更改了表单提交以创建FormData对象,然后使用jquery通过ajax上传。

当上传中没有太多大文件时,这很有用,但是超过一定限度,我会遇到Nginx(也可能是uWSGI)错误,告诉我我的请求对象太大了。显而易见的解决方案是将此属性设置得更高(我们被告知期望定期上传500MB - 2GB)但是团队对这会引起服务器端问题的警惕,老实说我不知道​​是否发送1GB HttpRequest是一个坏主意。

如果增加Nginx和uWSGI属性没有任何缺点,我们将继续这样做。如果有,我认为我的问题变得更多关于Django / javascript,并想知道这个上传的最好方法是什么(最好的,我希望意味着必须重写最少量的应用程序代码:))

感谢您的帮助! 罗伯特

1 个答案:

答案 0 :(得分:2)

尝试使用Blob界面上传File个对象Blob.slice(),以便在size的初始Blob超过设定字节长度时将上传分成部分

var blob = new Blob(["0123456789"]);
var len = blob.size;
var arr = [];
// if file size exceeds limit ,
// `.slice()` file into two or more parts
if (len > 5) {
  arr.push(blob.slice(0, 5), blob.slice(5));
};

arr.forEach(function(b, index) {
  setTimeout(function() {
    var reader = new FileReader();
    reader.onload = function(e) {
      // do stuff
      // e.g., send `e.target.result` , half of original file object to server
      // spaced two seconds apart
      // reassemble "slices" of `Blob` server side
      document.body.appendChild(
        document.createTextNode(
          e.target.result + "\n\n"
        )
      )
    }
    reader.readAsText(b);
  }, index * 2000);
});