7.2 获取目录及文件操作对象

优质
小牛编辑
130浏览
2023-12-01

无论是操作文件还是操作目录,都是对相应的操作对象进行操作,所以第一步都需要获取到目录及文件操作对象。Chrome应用无法像C语言那样通过路径直接操作文件,目录及文件操作对象总是需要通过Chrome自带的文件选择窗口获取的。

通过chooseEntry方法可以获取到目录及文件操作对象。当chooseEntry被执行时,一个文件选择窗口会马上弹出,所以应该让一些事件来触发其运行,比如点击按钮等,否则可能会让用户感到困惑。

document.getElementById('openfile').onclick = function(){
    chrome.fileSystem.chooseEntry({}, function(fileEntry){
        console.log(fileEntry);
        //do something with fileEntry
    });
}

上面这段代码会让用户选择一个已存在的文件,并返回此文件对应的操作对象。如果在Manifest中声明了写权限,fileEntry是可写的,否则是只读的。

在调用chooseEntry方法时,我们在上例中传递了一个空对象,这个对象用来定义chooseEntry打开的参数,默认情况下会以打开文件的方式获取操作对象。这个定义打开参数的对象完整结构如下:

{
    type: 打开类型,包括openFile、openWritableFile、saveFile和openDirectory,
    suggestedName: 建议的文件名,会自动显示在保存窗口的文件名输入框中,
    accepts: [
        {
            description: 此选项的文字描述,
            mimeTypes: [接受的mime类型,如"image/jpeg"或"audio/*"],
            extensions: [接受的文件后缀,如"jpg"或"gif"]
        }
    ],
    acceptsAllTypes: 如果设定了接受的指定类型文件,是否接受所有的类型文件,
    acceptsMultiple: 是否接受多个文件,只支持openFile和openWritableFile的打开方式
}

在参数对象中如果未指定type属性,则默认为openFile。由于在声明write权限后openFile方法获取的FileEntry可写,所以请考虑避免使用openWritableFile,因为在以后openWritableFile很可能被openFile替代。

但是saveFile却无法被openFile替代,因为saveFile可以创建新的文件,openFile则不可以。

type指定为openDirectory则可以获取到目录操作对象:

document.getElementById('opendirectory').onclick = function(){
    chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function(Entry){
        console.log(Entry);
        //do something with Entry
    });
}