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