File upload FileSystemApi和writableStream

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

我正在尝试使用文件系统API将SPA上上载的文件写入使用文件系统API的本地沙盒文件系统

该文件是通过drop acion上传的,我可以在回调中获得
文件
对象数组。 从
文件
中,我可以调用
方法获得
可读流
(是的,它只返回可读的sream)

考虑到上传的文件可能足够大,我会选择流式传输,而不是完全加载到blob中,然后写入文件系统api

因此,以下步骤是:

  • 通过async
    webkitRequestFileSystem
    调用获取文件系统(domfystem)
  • 获取作为FileSystemDirectoryEntry的prop
    root
  • 通过
    getFile
    (带标志
    create:true
    )创建一个文件,该文件返回一个
    FileSystemFileEntry
  • 现在,从FileEntry中,我可以使用
    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()默认情况下关闭目标管道,无需关闭。 }