使用FileReader和php上传大文件
我目前正在为非常大的文件(大于服务器将允许的范围)开发一个上传模块,其中包含进度和所有内容。看下面的代码。 它适用于文本文件,图像,甚至doc和pdf文件。 它崩溃的任何其他文件类型。 任何人有任何建议?使用FileReader和php上传大文件
var fr = new FileReader;
chunkSize = 524288;
//chunkSize = window.maxPost;
var chunks = Math.ceil(file.size/chunkSize);
var chunk = 0;
function SendSlice() {
var start, end;
start = chunk * chunkSize;
if (start > file.size) {
start = end + 1;
}
end = start + (chunkSize - 1) >= file.size ? file.size : start + (chunkSize - 1);
status = chunk == 0 ? "start" : (chunk == chunks ? "end" : "progress");
if (status == 'start') {
$("#upload-area").append("<p>Upload started for file " + file.name + "</p>");
}
fr.onload = function(e) {
var sliceData = e.target.result;
$.ajax({
type : "POST",
url : "uploader.php",
data : {
filename : file.name,
status : status,
slice : sliceData
}
}).success(function(data) {
if (++chunk <= chunks) {
SendSlice();
var progress = (chunk/chunks) * 100;
$("#progress-text").html(progress.toFixed(2) + "%");
$("#progress").css({
width : progress + "%"
});
} else {
$("#upload-area").append("<p>File " + file.name + " uploaded succesfully. Download file <a target='_blank' href='uploads/" + file.name + "'>here</a></p>");
}
});
};
fr.readAsDataURL(file.slice(start, end));
}
SendSlice();
而且PHP代码:
if($_POST['status'] == 'start') {
if (file_exists("uploads/" . $_POST['filename'])) {
unlink("uploads/" . $_POST['filename']);
}
}
$data = explode(",", $_POST['slice']);
$data = $data[1];
$data = base64_decode($data);
file_put_contents("uploads/" . $_POST['filename'], $data, FILE_APPEND);
而且,我一直在使用readAsBinaryString尝试过,但我没有想法怎么处理结果在PHP。请指点
这仅仅是一个在黑暗中拍摄,但看file.slice API(http://www.w3.org/TR/FileAPI/#dfn-slice),它说:
“slice方法返回一个字节不等的可选开始一个新的Blob对象参数直到但不包括可选的结束参数,并带有一个类型属性,它是可选的contentType参数的值。“
但是,在使用它之前,你从“end”中减去1 - 这是否意味着在每个块上省略1个字节(因为结尾字节不包括在内)?
(另外,你消毒$ _ POST [“名”]在使用它之前 - 不,有人把“../yourscript.php”在那里..权;?))
让我试试这个... – d4rkpr1nc3 2013-02-14 14:47:42
是的,那正是问题!谢谢 – d4rkpr1nc3 2013-02-14 14:48:52
是的,我会清理它。 – d4rkpr1nc3 2013-02-14 14:50:29
当你说“崩溃' - 你实际得到了什么错误信息?而且,您用于上传的特定文件是什么 - 举例说明类型。这应该有所帮助。 – 2013-02-14 14:25:26
是的,对不起。它实际上并没有崩溃。它上传文件,但是当我尝试下载它时,它是腐蚀的。我试过上传zip,rar,cab,甚至exe文件。 – d4rkpr1nc3 2013-02-14 14:37:05