【发布时间】:2013-03-25 01:14:18
【问题描述】:
好的,所以我从一个不同的问题中找到了这种上传大文件的方法:
function sliceit(file)
{
fr = new FileReader;
chunkSize = 1000000;
chunks = Math.ceil(file.size / chunkSize);
chunk = 0;
var isstart = true;
function loadNext() {
start, end,
start = chunk * chunkSize;
if (start > file.size)
start = end+1;
end = start + (chunkSize -1) >= file.size ? file.size : start + (chunkSize -1);
fr.onloadend = function(e)
{
while(!fr.result || fr.result == "" || fr.result == undefined)
{
}
fdata = fr.result;
xmlhttp, form, data;
data = {};
data.filename = document.getElementById("filename0").value;
data.username = document.getElementById("username").value;
data.password = document.getElementById("password").value;
data.public = document.getElementById("public").value;
if(isstart)
{
var form = new FormData();
form.append("filename", data.filename);
form.append("username", data.username);
form.append("password", data.password);
form.append("public", data.public);
form.append("filebytes", fdata);
xmlhttp = jQuery.ajaxSettings.xhr();
xmlhttp.open("POST", "../MakeEmptyFile.php", false);
isstart = false;
}
else
{
form = new FormData();
form.append("filename", data.filename);
form.append("username", data.username);
form.append("password", data.password);
form.append("filebytes", fdata);
xmlhttp = jQuery.ajaxSettings.xhr();
xmlhttp.open("POST", "../AddTo.php", false);
}
xmlhttp.send(form);
console.log(xmlhttp.responseText);
if (++chunk <= chunks)
{
loadNext();
}
else
{
stdlog("Completed.");
}
};
fr.readAsText(file.slice(start, end));
}
loadNext();
}
由于某种原因,每次我加载 XMLHttpRequest 时,它都显示文件数据从未真正发送过。这是因为它太大了,还是什么?谢谢!
【问题讨论】:
-
你为什么使用 FileReader?
-
@RayNicholus 因为我上传的文件太大而无法正常发送,所以我使用 FileReader 对象一次读取大约 10 兆字节,这应该足够慢。
-
这不是 FileReader 的用途。无需使用 FileReader 将文件拆分为块。只需在 File 对象上使用 slice 方法并将生成的 Blob 发送到您的服务器。
-
@RayNicholus 这行得通吗? blob 会以字符串还是上传文件的形式发送到服务器?
标签: javascript upload xmlhttprequest