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

Django: 413 (request entity too large) error upon ajax upload of Formdata containing files

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

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

如果提升 Nginx 和 uWSGI 属性没有负面影响,我们将继续这样做。如果有的话,我认为我的问题更多地是关于 Django/javascript,并且想知道将此上传分块的最佳方式是什么(最好的情况是,我希望意味着必须重写最少数量的应用程序代码:))

感谢您的帮助! 罗伯特

如果 Blob 的初始 size 超过设置的字节长度,请尝试利用 Blob interface to upload File objects , Blob.slice() 将上传分成几部分

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