03、cordova-文件类插件

作者: 魔力小小鸟 | 来源:发表于2017-03-21 13:48 被阅读1023次

    File:文件读取

    安装:

    cordova plugin add cordova-plugin-file --save
    cordova plugin rm cordova-plugin-file --save
    

    配置 cdvfile:

    config.xml:

    <access origin="cdvfile://*" />
    

    index.html: Content-Security-Policy 增加 cdvfile:

    <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap:cdvfile:https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
    

    主要的几个对象:

    FileSystem
    Entry
    DirectoryEntry
    FileEntry

    三种路径格式:

    //第一种:file
    alert("file:///x/y/z/");
    
    //第二种:cdvdile
    alert("cdvfile://localhost/persistent/x/y/z");
    alert("cdvfile://localhost/temporary/x/y/z");
    
    //第三种:
    alert(cordova.file.applicationDirectory);
    alert(cordova.file.applicationStorageDirectory);
    alert(cordova.file.dataDirectory);
    alert(cordova.file.cacheDirectory);
    alert(cordova.file.externalApplicationStorageDirectory);
    alert(cordova.file.externalDataDirectory);
    alert(cordova.file.externalCacheDirectory);
    alert(cordova.file.externalRootDirectory);
    alert(cordova.file.tempDirectory);
    alert(cordova.file.syncedDataDirectory);
    alert(cordova.file.documentsDirectory);
    alert(cordova.file.sharedDirectory);
    

    路径操作:(获取Entry/转换路径)

    1、requestFileSystem:仅两个目录 PERSISTENT / TEMPORARY

    window.requestFileSystem(存储类型,期望存储空间大小(b字节),成功回调,失败回调)
    存储类型:LocalFileSystem.PERSISTENT / LocalFileSystem.TEMPORARY
    返回 FileSystem {name: string, root: DirectoryEntry}

    window.requestFileSystem(
        LocalFileSystem.PERSISTENT,  //永久目录
        //LocalFileSystem.TEMPORARY,  //临时目录
        0,  //如果是需要创建 PERSISTENT 永久文件 需要为0
        function (fs) {  //fs FileSystem  {name: string, root: DirectoryEntry}
            alert("fs名字:" + fs.name);  //persistent
            alert("DirectoryEntry:"+fs.root);  // DirectoryEntry 对象
            alert("DirectoryEntry isFile:"+fs.root.isFile);  //false
            alert("DirectoryEntry isDirectory:"+fs.root.isDirectory);  //true
            alert("DirectoryEntry name:"+fs.root.name);  //""
            alert("DirectoryEntry fullPath:"+fs.root.fullPath);  // /
            alert("DirectoryEntry fileSystem:"+fs.root.fileSystem);  // undefined
            alert("DirectoryEntry nativeURL:"+fs.root.nativeURL);  // file:///data/data/com.example.hello/files/files/
        },
        function (file_error) {
            alert("错误:" + file_error);
        }
    );
    

    2、window.resolveLocalFileSystemURL:可以转换路径(native file <-> cdvfile)

    window.resolveLocalFileSystemURL("url", 成功回调, 错误回调);

    var native_path = "file:///";
    // var cdvfile_path = "cdvfile://localhost/persistent/";
    window.resolveLocalFileSystemURL(
        native_path,
        //cdvfile_path,
        function (entry) {
            alert("entry isFile:"+entry.isFile);  //false
            alert("entry isDirectory:"+entry.isDirectory);  //true
            alert("entry name:"+entry.name);  //""
            alert("entry fullPath:"+entry.fullPath);  // /
            alert("entry fileSystem:"+entry.fileSystem);  // undefined
            alert("entry nativeURL:"+entry.nativeURL);  // file:///data/data/com.example.hello/files/files/
            alert('entry toURL: ' + entry.toURL());  // file:///data/data/com.example.hello/files/files/
            alert('entry toInternalURL: ' + entry.toInternalURL());  // cdvfile://localhost/persistent/
        },
        function(file_error){
            alert("错误:" + file_error);
        }
    );
    

    目录操作:(创建/遍历/删除)

    var entry = xxx;  //通过 requestFileSystem / resolveLocalFileSystemURL 获得
    
    entry.getDirectory(
        "new_path",
        {create: true},
        function (directory_entry) {
            alert("创建目录成功");
        },
        function (file_error) {
            alert("错误:" + file_error);
        }
    );
    
    entry.getDirectory(
        "",
        {create: false},
        function (directory_entry) {
            directory_entry.createReader().readEntries(  //如果 entry 已经是 DirectoryEntry 可以直接从这步开始
                function(entry_array){
                    alert("遍历目录:");
                    for(var index in entry_array){
                        alert(entry_array[index].toURL());  //native file
                        alert(entry_array[index].toInternalURL());  //cdvfile
                    }
                },
                function (file_error) {
                    alert("遍历错误:" + file_error);
                }
            );
        },
        function (file_error) {
            alert("错误:" + file_error);
        }
    );
    
    entry.getDirectory(
        "new_path",  //注意:根目录""不能够删除
        {create: false},
        function (directory_entry) {
            directory_entry.removeRecursively(  //如果 entry 已经是 DirectoryEntry 可以直接从这步开始
                function(){
                    alert("删除目录成功");
                },
                function (file_error) {
                    alert("删除目录错误:" + file_error);
                }
            );
        },
        function (file_error) {
            alert("错误:" + file_error);
        }
    );
    

    文件操作:(创建/写/追加/读/删除)

    var entry = xxx;  //通过 requestFileSystem / resolveLocalFileSystemURL 获得
    
    //创建
    entry.getFile(
        "file_name.txt",
        { create: true, exclusive: false },
        function (file_entry) {
            //写入
            var blob = new Blob(
                        ['测试测试测试测试测试'],
                        {type: 'text/plain'}
                     );
            file_entry.createWriter(
                function (file_writer) {
                    file_writer.onwriteend = function () {
                        alert("写入完成");
                    };
                    file_writer.onerror = function (e) {
                        alert("写入失败");
                    };
            
                    // 移动指针  === 追加写入
                    /*
                    try {
                        fileWriter.seek(fileWriter.length);
                    } catch (e) {
                        alert("移动指针错误:" + e);
                    }
                    */
            
                    file_writer.write(blob);  //写入内容
                },
                function (file_error) {
                    alert("写入错误:" + file_error);
                }
            );
        },
        function(file_error){
            alert("错误:" + file_error);
        }
    );
    
    //读取
    entry.getFile(
        "file_name.txt",
        { create: false, exclusive: false },
        function (file_entry) {
            file_entry.file(  //如果 entry 已经是 FileEntry 可以直接从这步开始
                function (file) {
                    var reader = new FileReader();
                    reader.onloadend = function () {
                        alert("读取成功");
                        alert("读取内容:" + this.result);
                    };
                    reader.onerror = function(){
                        alert("读取失败");
                    };
                    reader.readAsText(file);
                },
                function (file_error) {
                    alert("错误:" + file_error);
                }
            );
        },
        function(file_error){
            alert("错误:" + file_error);
        }
    );
    
    //删除:
    entry.getFile(
        "file_name.txt",
        { create: false, exclusive: false },
        function (file_entry) {
            file_entry.remove(  //如果 entry 已经是 FileEntry 可以直接从这步开始
                function () {
                    alert("删除失败");
                },
                function (file_error) {
                    alert("删除错误:" + file_error);
                }
            );
        },
        function(file_error){
            alert("错误:" + file_error);
        }
    );
    

    file transfer 文件上传下载:

    安装:

    cordova plugin add cordova-plugin-file-transfer --save
    cordova plugin rm cordova-plugin-file-transfer --save
    

    上传:

    //参数:
    var options = new FileUploadOptions();
    options.fileKey = "file";  //类型,默认文件
    options.fileName = fileURL.substr(fileURL.lastIndexOf('/') + 1);  //文件名
    options.httpMethod = "POST";  //默认POST
    options.mimeType = "text/plain";
    options.trustAllHosts = true;  //是否接受所有证书 默认false
    options.params = {  //请求参数 键值对
        value1:"test",
        value2:"param"
    };
    
    var ft = new FileTransfer();
    //upload(文件路径,上传路径(encodeURI编码),成功回调,失败回调,参数);
    ft.upload("",
        encodeURI("http://some.server.com/upload.php"),
        function(file_upload_result){
            alert("响应码:" + file_upload_result.responseCode);
            alert("响应:" + file_upload_result.response);
            alert("发送字节数:" + file_upload_result.bytesSent);
        },
        function(error){
            alert("错误码:" + error.code);
            alert("错误资源:" + error.source);
            alert("错误目标:" + error.target);
        },
        options
    );
    

    下载:

    var fileTransfer = new FileTransfer();
    //download(下载路径(encodeURI), 存储位置,成功回调,错误回调,是否信任所有证书,参数)
    fileTransfer.download(
        encodeURI("http://some.server.com/download.php"),
        "filepath",
        function(entry) {
            console.log("download complete: " + entry.toURL());
        },
        function(error) {
            console.log("download error source " + error.source);
            console.log("download error target " + error.target);
            console.log("download error code" + error.code);
        },
        true,
        {
            headers: {
                // "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
            }
        }
    );
    

    中止:

    ft.abort();  //会给回调函数返回错误:FileTransferError.ABORT_ERR
    

    file opener2 本地默认软件打开文件:

    安装:

    cordova plugin add cordova-plugin-file-opener2 --save
    cordova plugin rm cordova-plugin-file-opener2 --save
    

    使用:

    cordova.plugins.fileOpener2.open(
        //文件路径:格式:"/sdcard/Download/starwars.pdf"
        //也可以是 cdvfile 格式 "cdvfile://localhost/persistent/Download/starwars.pdf"
        "filePath",
        "fileMIMEType",  //文件类型'application/pdf',
        {
            error : function(e){alert("失败"+e)},
            success : function(){alert("成功")}
        }
    );
    

    相关文章

      网友评论

        本文标题:03、cordova-文件类插件

        本文链接:https://www.haomeiwen.com/subject/wkqgnttx.html