Javascript 如何使用现代FileApi在本地fs中创建文件?

Javascript 如何使用现代FileApi在本地fs中创建文件?,javascript,fileapi,Javascript,Fileapi,我有以下代码: document.querySelector('#myfile').onchange=function(e){ var files=this.files; requestFileSystem(window.TEMPORARY,1024*1024,函数(fs){ 让file=files[0]; 让nem_file_name=file.name+“_copy”; getFile(nem_文件名{ 创造:真的, 独家:对 },函数(fileEntry){ fileEntry.crea

我有以下代码:

document.querySelector('#myfile').onchange=function(e){
var files=this.files;
requestFileSystem(window.TEMPORARY,1024*1024,函数(fs){
让file=files[0];
让nem_file_name=file.name+“_copy”;
getFile(nem_文件名{
创造:真的,
独家:对
},函数(fileEntry){
fileEntry.createWriter(fileWriter=>{
fileWriter.write(文件);
},()=>警报('error 1');
},err=>alert('error 2'+err));
},()=>警报('error 3');
};
声明此方法是非标准的,仅在Chrome中使用,并且已被弃用:

即使与其他文件和目录条目API相比, requestFileSystem()特别不标准;仅镀铬工具 它和所有其他浏览器制造商都已决定不这样做 实施它。它甚至已从拟议的方案中删除 规范。不要使用这种方法

您不应该使用它。

调用了“现代”API,它仍然只是一个建议,但有望取代以前的和不推荐使用的文件系统API,并且已经在Chromium浏览器中可用

要使用此API编写文件,首先使用
showSaveFilePicker()
方法请求文件句柄,然后可以从该句柄创建一个writer,并使用该writer追加数据:

onclick=async(e)=>{//需要由用户手势启动
const handle=wait showSaveFilePicker();//提示“另存为”
const writer=await handle.createWritable();//请求可写流
wait writer.write(新Blob([“某些数据]);//直接写入Blob
writer.close();//结束写入
};
但是这个API仍然受到过度保护,所以很遗憾,它不能在跨源iFrame中运行,就像StackSnippet或最流行的fiddling服务在这里使用的那样。因此,为了制作一个现场演示,我必须,您必须在窗口模式下运行


如果需要自己设置文件名,则需要使用
showDirectoryPicker()
请求目录访问,然后使用其
getFileHandle()
方法从该目录句柄获取文件句柄

我无法重现它默默失败的问题。当我触发该函数时,它提供了一个非常清楚和明显的错误。事实上,这对我来说不是一个问题。是否存在任何解决方案,至少在Chrome浏览器中本地写入文件?@mystdeim您读过这个答案吗?是的,这样的解决方案是存在的,其中的代码就是这样做的。在展示您的示例中的SaveFilePicker之前,谢谢!顺便说一句,我没有找到向showSaveFilePicker传递自定义文件名的可能性。@mystdeim。。。答案中也有,检查第二个plnkr