關於文件上傳HTML5 Rocks有一些很好的例子,但有些東西對我來說還不夠清楚。HTML5文件API - 切片或不?
就我所見,關於file slicing的示例代碼是從文件中獲取特定部分然後讀取它。正如說明所述,這對我們處理大文件時很有幫助。
有關monitoring uploads的示例還指出,當我們上傳大文件時,這非常有用。
我沒有切片文件安全嗎?我的意思是服務器端問題,內存等。Chrome目前不支持File.slice()
,如果可能的話,我不想使用臃腫的jQuery插件。
關於文件上傳HTML5 Rocks有一些很好的例子,但有些東西對我來說還不夠清楚。HTML5文件API - 切片或不?
就我所見,關於file slicing的示例代碼是從文件中獲取特定部分然後讀取它。正如說明所述,這對我們處理大文件時很有幫助。
有關monitoring uploads的示例還指出,當我們上傳大文件時,這非常有用。
我沒有切片文件安全嗎?我的意思是服務器端問題,內存等。Chrome目前不支持File.slice()
,如果可能的話,我不想使用臃腫的jQuery插件。
Chrome和FF都支持File.slice()
,但前段時間its semantics changed前綴爲File.webkitSlice()
File.mozSlice()
。還有另外一個使用它來讀取.zip文件的一部分的例子。新的語義是:
Blob.webkitSlice(
in long long start,
in long long end,
in DOMString contentType
);
你安全沒有切片嗎?當然,但請記住你正在將文件讀入內存。 HTML5Rocks教程提供了分塊上傳功能,作爲潛在的性能改進。藉助一些體面的服務器邏輯,您還可以更輕鬆地從失敗的上傳中恢復。用戶將不必重新嘗試整個500MB的文件,如果它失敗在99%:)
這是切片文件的方式來傳遞的斑點:
function readBlob() {
var files = document.getElementById('files').files;
var file = files[0];
var ONEMEGABYTE = 1048576;
var start = 0;
var stop = ONEMEGABYTE;
var remainder = file.size % ONEMEGABYTE;
var blkcount = Math.floor(file.size/ONEMEGABYTE);
if (remainder != 0) blkcount = blkcount + 1;
for (var i = 0; i < blkcount; i++) {
var reader = new FileReader();
if (i == (blkcount - 1) && remainder != 0) {
stop = start + remainder;
}
if (i == blkcount) {
stop = start;
}
//Slicing the file
var blob = file.webkitSlice(start, stop);
reader.readAsBinaryString(blob);
start = stop;
stop = stop + ONEMEGABYTE;
} //End of loop
} //End of readblob
'FileReader.readAsBinaryString()'已棄用。它不再位於[W3C File API](https://www.w3.org/TR/FileAPI/#dfn-filereader)工作草案:'// async read methods' 'void readAsArrayBuffer(Blob blob);' 'void readAsText(Blob blob,可選的DOMString標籤);' 'void readAsDataURL(Blob blob);' –
然後還有歌劇,實現'.slice()',但有兩種不同的方式,一種遵循w3c,另一種不是=/ –
[MDN說](https://developer.mozilla.org/en-US/docs/DOM/Blob ),從Firefox 13和Chrome 21開始,slice()不再是前綴。 –
您可以在大多數瀏覽器的新版本中使用不帶前綴的方法。 –