File upload FileSystemApi和writableStream
我正在尝试使用文件系统API将SPA上上载的文件写入使用文件系统API的本地沙盒文件系统 该文件是通过drop acion上传的,我可以在回调中获得File upload FileSystemApi和writableStream,file-upload,html5-filesystem,native-file-system-api-js,File Upload,Html5 Filesystem,Native File System Api Js,我正在尝试使用文件系统API将SPA上上载的文件写入使用文件系统API的本地沙盒文件系统 该文件是通过drop acion上传的,我可以在回调中获得文件对象数组。 从文件中,我可以调用流方法获得可读流(是的,它只返回可读的sream) 考虑到上传的文件可能足够大,我会选择流式传输,而不是完全加载到blob中,然后写入文件系统api 因此,以下步骤是: 通过asyncwebkitRequestFileSystem调用获取文件系统(domfystem) 获取作为FileSystemDirectory
文件
对象数组。
从文件
中,我可以调用流
方法获得可读流
(是的,它只返回可读的sream)
考虑到上传的文件可能足够大,我会选择流式传输,而不是完全加载到blob中,然后写入文件系统api
因此,以下步骤是:
webkitRequestFileSystem
调用获取文件系统(domfystem)root
getFile
(带标志create:true
)创建一个文件,该文件返回一个FileSystemFileEntry
createWriter
获得一个FileWriter,但它已经过时(在MDN中),而且在任何情况下,它都是一个FileWriter,而我希望获得一个WritableStream
,以便从上载的文件处理程序->ReadableStream使用pipeTo
因此,我看到控制台中定义了类(接口)FileSystemFileHandler
,但我无法理解如何从FileSystemFileEntry
获取实例。如果我可以获得一个FileSystemFileHandler
我可以调用createWritable
来获得一个FileSystemWritableFileStream
,我可以用ReadStream来“管道”它
谁能澄清这一混乱局面
参考资料:
在底部的“参考”链接中有解决方案。具体来说,这是阅读的重点。您可以这样创建文件或目录:
//在现有目录中,创建一个名为“My Documents”的新目录。
const newDirectoryHandle=等待现有的directoryHandle.getDirectoryHandle('我的文档'{
创造:真的,
});
//在这个新目录中,创建一个名为“My Notes.txt”的文件。
const newFileHandle=wait newDirectoryHandle.getFileHandle('My Notes.txt',{create:true});
一旦有了文件句柄,就可以通过管道传输到该句柄或写入该句柄:
异步函数writeFile(文件句柄,内容){
//创建要写入的FileSystemWritableFileStream。
const writeable=await fileHandle.createwriteable();
//将文件的内容写入流。
等待可写。写入(内容);
//关闭文件并将内容写入磁盘。
等待可写。关闭();
}
……或者
异步函数writeURLToFile(文件句柄,url){
//创建要写入的FileSystemWritableFileStream。
const writeable=await fileHandle.createwriteable();
//对内容发出HTTP请求。
const response=等待获取(url);
//将响应流式传输到文件中。
wait response.body.pipeTo(可写);
//pipeTo()默认情况下关闭目标管道,无需关闭。
}