03、cordova-文件类插件

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("成功")}
    }
);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容