我正在使用自定义API来允许用户上传文件(希望是任意大小)。如果文件很大,它将被块化,并在多个请求中处理到服务器。什么是HTML5 File.slice方法实际上在做什么?
我在编写使用File
和FileReader
(HTML5)的代码。一般(从我在网上读)的chunkfied文件传输,人们首先会从他们的文件对象获取数据的BLOB
var file = $('input[type=file]')[0].files[0];
var blob = file.slice(start,end)
然后用FileReader
读取BLOB readAsArrayBuffer(blob)
或readAsBinaryString(blob)
而且最后在FileReader.onload(e)
的方法中,将数据发送到服务器。对文件中的所有块重复此过程。
我的问题是
为什么我需要使用一个FileReader
?如果我不使用它,只需发送带有File.slice
的斑点,是否有任何保证在我尝试发送每个请求中的数据之前将执行切片操作。 File
对象是否在创建时加载整个文件(当然不是?)。 File.slice
寻求参数规定的位置,然后读取?文档没有给我提供如何实现的线索。
感谢您为我定义File,这更有意义。但是,如果我仍然使用File.Slice(它会返回一个blob),然后尝试使用XMLHttpRequest.send(myBlob)将该Blob发送到服务器,那么如何/何时从该文件检索到数据并将其提供给服务器。或者这只是失败/不发送任何数据? - – Ponml
我更新了我的答案,以提供更多的细节。当我编写我的javascript rsync实用程序时,我深入了解了这些内容:https://github.com/claytongulick/bit-sync –