我在Django管理员中工作,我已经更改了表单提交以创建FormData对象,然后使用jquery通过ajax上传。
当上传中没有太多大文件时,这很有用,但是超过一定限度,我会遇到Nginx(也可能是uWSGI)错误,告诉我我的请求对象太大了。显而易见的解决方案是将此属性设置得更高(我们被告知期望定期上传500MB - 2GB)但是团队对这会引起服务器端问题的警惕,老实说我不知道是否发送1GB HttpRequest是一个坏主意。
如果增加Nginx和uWSGI属性没有任何缺点,我们将继续这样做。如果有,我认为我的问题变得更多关于Django / javascript,并想知道这个上传的最好方法是什么(最好的,我希望意味着必须重写最少量的应用程序代码:))
感谢您的帮助! 罗伯特
答案 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);
});