cordova file插件


介绍

使用文件系统处理API可以操作设备的文件系统、文件夹及文件。

 

 


 

安装

cordova plugin add cordova-plugin-file

 


 

 

使用方法

这个插件定义了全局的cordova.file对象

虽然定义在全局中,但是需要使用deviceready事件之后

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    console.log(cordova.file);
}

 

 

 

 

方法

window.requestFileSystem()

window.resolveLocalFileSystemURL()

 

 


window.requestFileSystem()

其中各个参数的含义如下所示:

Type:文件系统的类型,可选值LocalFileSystem.TEMPORARY LocalFileSystem.PERSISTENT,前者是临时文件,后者是持久性文件

Size:应用要请求的存储大小以字节为单位。

successCallback:成功的回调函数,返回的参数FileSystem对象

errorCallback:失败的回调函数,返回的参数是FileError对象





window.resolveLocalFileSystemURL()

其中 各个参数的含义如下所示:

url在文件系统中的一个本地文件的URL

successCallback成功的回调

errorCallback失败的回调




示例一:创建一个临时txt文件,写入文本内容,并上传

创建一个临时txt文件,写入文本内容后,到手机存储中查看

index.html

<!DOCTYPE html>
<html>
    <head>
    	<meta charset="utf-8" />
        <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <title>Hello World</title>
        <style>
             .line{
                  padding: 10px;        
             }
        </style>
    </head>
    <body>
        <div class="app">
            <h1>File plugin</h1>
            <div class="line"><button id="btn">按钮</button></div>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
    </body>
</html>

 

 index.js

// 创建一个txt文件,并写入数据入文件
var app = {
    // Application Constructor
    initialize: function() {
        document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
    },

    // deviceready Event Handler
    onDeviceReady: function() {
        this.receivedEvent();
    },

    // Update DOM on a Received Event
    receivedEvent: function() {
    	var _this = this;
    	var btn = document.getElementById("btn");
    	btn.onclick = function(){
    		// 调用file插件
    		_this.requestFileSystem();
    	}
    	
    },
    // file插件
    requestFileSystem: function(){
    	var _this = this;
    	// 获取fs对象
    	window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, function (fs) {
		    console.log('file system open: ' + fs.name);	//temporary
		    // 创建txt文件,返回fileEntry对象
		    fs.root.getFile("log.txt", { create: true, exclusive: false }, function (fileEntry) {
		     	console.log(fileEntry)
		    	    var dataObj = "运行日志";
		    	    writeFile(fileEntry, dataObj);
		    }, onErrorCreateFile);
		}, function(err){
			console.log(err)
		});
		
		function onErrorCreateFile(e){
			console.log(e)
		}
		
		/*
		 * 写入内容到txt文件
		 * param {object} fileEntry对象
		 * param {object} dataObj数据对象
		 */
		function writeFile(fileEntry, dataObj) {
		    // Create a FileWriter object for our FileEntry (log.txt).
		    fileEntry.createWriter(function (fileWriter) {
		        fileWriter.onwriteend = function(e) {
                            alert("成功创建log文件,并写入数据");
		            console.log(e);
		        };
		
		        fileWriter.onerror = function(e) {
		            console.log("Failed file write: " + e.toString());
		        };
		
		        fileWriter.write(dataObj);
		    });
		}
		
    }
};

app.initialize();

 运行:


点击“按钮”,弹窗显示成功创建log文件


弹窗后输出内容:


我们根据文件路径,查看是否创建了log.txt文件

但是打开/data路径后,却没找到文件


 

 

续上:

config文件内,添加这句代码,再次启动应用

config.xml

<preference name="AndroidPersistentFileLocation"value="Compatibility"/>

 

运行:

点击按钮后,输出如下内容:


和上面输出的fileEntry内容,文件的路径有所不同。

根据这个文件路径的,查看文件管理器,查看是否创建了log.txt文件

找到如下路径:/sdcard/Android/data/com.abc.www/cache

其中com.abc.www是对应你应用的包名

找到了log.txt文件


打开文件,显示出所写入文件的内容


 

分析:

为什么加入这句代码后<preference name="AndroidPersistentFileLocation"value="Compatibility"/>,所储存的路径发生了改变?

这是因为没有使用的话,系统会默认使用如下配置

<preference name="AndroidPersistentFileLocation" value="Internal" />

文件则会保存在 /data/user/0/ 中,用户通过文件管理器查找文件,是查看不到的。不管你使用的是临时存储还是持久化存储。

而使用此配置

<preference name="AndroidPersistentFileLocation" value="Compatibility" />

那么文件就会存储到/storage/emulated/0/ 中,用户通过文件管理器查找文件,是可以查看的。不管你使用的是临时存储还是持久化存储。

 

备注:

把临时文件LocalFileSystem.TEMPORARY改成永久文件LocalFileSystem.PERSISTENT 的话,就会保存到/sdcard路径上


 

 

 

续上:将写入内容的文件上传到服务器

需要安装file-transfer插件

index.js

// 创建一个txt文件,并写入数据入文件
var app = {
    // Application Constructor
    initialize: function() {
        document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
    },

    // deviceready Event Handler
    onDeviceReady: function() {
        this.receivedEvent();
    },

    // Update DOM on a Received Event
    receivedEvent: function() {
    	var _this = this;
    	var btn = document.getElementById("btn");
    	btn.onclick = function(){
    		// 调用file插件
    		_this.requestFileSystem();
    	}
    	
    },
    // file插件
    requestFileSystem: function(){
    	var _this = this;
    	// 获取fs对象
    	window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, function (fs) {
		console.log('file system open: ' + fs.name);
		// 创建txt文件,返回fileEntry对象
		fs.root.getFile("log.txt", { create: true, exclusive: false }, function (fileEntry) {
		    	console.log(fileEntry)
		    	var dataObj = "运行日志";
		    	writeFile(fileEntry, dataObj);
		    }, onErrorCreateFile);
		}, function(err){
			console.log(err)
		});
		
		function onErrorCreateFile(e){
			console.log(e)
		}
		
		/*
		 * 写入内容到txt文件
		 * param {object} fileEntry对象
		 * param {object} dataObj数据对象
		 */
		function writeFile(fileEntry, dataObj) {
		    // Create a FileWriter object for our FileEntry (log.txt).
		    fileEntry.createWriter(function (fileWriter) {
		        fileWriter.onwriteend = function(e) {
		            console.log("成功创建log文件,并写入数据");
		            console.log(e);
          	
	                // 上传文件
	                uploadFile(fileEntry);
		        };
		
		        fileWriter.onerror = function(e) {
		            console.log("Failed file write: " + e.toString());
		        };
		
		        fileWriter.write(dataObj);
		    });
		}
		
		function uploadFile (fileEntry) {
			var fileURL = fileEntry.toURL();
		    // 成功的回调
		    var win = function (r) {
		        alert("Code = " + r.responseCode);
		    }
		    // 失败的回调
		    var fail = function (error) {
		        alert("An error has occurred: Code = " + error.code);
		    }
		    // options配置项
		    var options = new FileUploadOptions();
		    options.fileKey = "file";											// fileKey
		    options.fileName = fileURL.substr(fileURL.lastIndexOf('/') + 1);	// fileName
		    options.mimeType = "text/plain";									// mimeType
		    
		    var params = {};
		    params.value1 = "test";
		    params.value2 = "param";
		    options.params = params;								// params
		    
		    // 初始化FileTransfer对象
		    var ft = new FileTransfer();
		    // 调用upload方法
		    ft.upload(fileURL, encodeURI("http://10.1.10.53:8089/oss/UploadServlet"), win, fail, options);
		}
		
    }
};

app.initialize();

 

运行:

读取写入到手机存储中txt文件,上传文件到服务器


打开服务器,可以看到我们上传的文件







示例二:创建文件夹

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
    <meta name="format-detection" content="telephone=no">
    <meta name="msapplication-tap-highlight" content="no">
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
    <title>Hello World</title>
    <style>
             .line{
                  padding: 10px;
             }
        </style>
</head>
<body>
<div class="app">
    <h1>File plugin</h1>
    <div class="line"><button id="btn">按钮</button></div>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>

 

index.js

var app = {
    // Application Constructor
    initialize: function() {
        document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
    },

    // deviceready Event Handler
    onDeviceReady: function() {
        this.receivedEvent();
    },

    // Update DOM on a Received Event
    receivedEvent: function() {
       var _this = this;
       var btn = document.getElementById("btn");
       btn.onclick = function(){
          _this.createAndWriteFile();
       }

    },
    // file插件,创建目录
    createAndWriteFile: function(){
        //临时数据保存
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {
            console.log('打开的文件系统: ' + fs.name);
            fs.root.getDirectory('MichaelOuyang', { create: true }, function (dirEntry) {
                console.log(dirEntry);
                dirEntry.getDirectory('images', { create: true }, function (subDirEntry) {
                    alert("创建的文件夹成功");
                    console.log(subDirEntry);
                }, onErrorGetDir);
            }, onErrorGetDir);
        }, onErrorLoadFs);

        //文件夹创建失败回调
        function onErrorGetDir(error){
          console.log("文件夹创建失败!")
        }
        //FileSystem加载失败回调
        function  onErrorLoadFs(error){
          console.log("文件系统加载失败!")
        }
    }

};

app.initialize();

 

config.xml

<preference name="AndroidPersistentFileLocation" value="Compatibility"/>

 

 运行:


弹窗显示创建文件夹成功


 打开文件管理器,可以查看到我们的创建文件在/sdcard








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
新颖网络上传插件(StorageWebPlug)是一个支持超大文件(2GB,可扩展)上传的COM控件, 具备断点续传,文件MD5验证,大大提高上传效率、节省带宽,有详细的上传进度显示,支持多种脚本语言,欢迎下载体验。免费提供JavaScript SDK包。 产品特点: 1、文件上传使用增强的FTP协议,用户使用浏览器就可以上传超大文件到服务器(支持上传超过1G的文件)。 2、支持断点续传,系统智能续传未上传的文件,续传操作更简单,更方便,更快捷。 3、支持文件批量上传, 一次可以上传多个文件. 上传时有详细的状态显示(包括单个文件进度,整体进度,传输速率,剩余时间等)。 4、新颖网络免费提供JavaScript SDK包。通过新颖网络提供的封装好的JavaScript类库用户可以快速的与现有系统整合。 5、StorageWebPlug提供完善的接口和帮助文档,开发文档。开发人员可以动态设置上传保存路径, 设置允许扩展名, 允许最大大小等,可自定义强。 6、支持各种代理(HTTP, Socket4, Socket5等)。 7、组件采用多线程机制来保证上传效率。 8、支持批量文件上传, 用户可以一次性上传批量文件. 客户端可以绑定HTML表单变量, 服务端并可以接收表单变量 9、服务端文件保存路径可以随意指定,服务端文件保存路径可以灵活变化。保存路径支持网络路径。 10、为提高安全性,服务端组件可以指定用户权限 11、可以限制上传单个文件大小, 控制上传带宽上限, 允许文件扩展名, 拒绝文件扩展名等 12、上传数据时会根据网络状况来控制数据包大小, 避免网络堵塞 13、控件采用ATL编写, cab包只有59KB, 用56k的modem下载不会超过12秒 14、服务端支持Windows 2000 Server/Windows 2003 Server/Windows NT/Windows XP/Unix/Linux等操作系统 15、通过新颖网络业界领先的设计水平打造的操作界面可以帮助您的系统和产品获得更高的品质。 产品介绍:http://www.ncmem.com/service_storagewebplug.aspx 下载地址:http://www.ncmem.com/download.aspx
开发 Cordova 插件的基本步骤如下: 1. 创建插件项目 使用 Cordova 命令行工具创建一个新的插件项目,例如: ``` cordova create my-plugin com.example.myplugin MyPlugin ``` 这将创建一个名为 `my-plugin` 的 Cordova 项目,并在 `my-plugin/plugins` 目录下创建一个名为 `com.example.myplugin` 的插件。 2. 添加插件代码 在 `my-plugin/plugins/com.example.myplugin` 目录下创建一个子目录,例如 `src/ios`,在其中添加插件的原生代码。对于 iOS 平台,这通常是一个 `.m` 文件和一个 `.h` 文件。对于 Android 平台,这通常是一个 `.java` 文件。 3. 添加插件描述文件 在 `my-plugin/plugins/com.example.myplugin` 目录下创建一个名为 `plugin.xml` 的文件,该文件描述了插件的信息和功能。插件描述文件示例: ```xml <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="com.example.myplugin" version="1.0.0"> <name>MyPlugin</name> <description>This is my plugin</description> <license>Apache 2.0</license> <keywords>cordova, plugin, myplugin</keywords> <author email="me@example.com" href="http://example.com"> My Name </author> <engines> <engine name="cordova" version=">=3.0.0" /> </engines> <platform name="ios"> <source-file src="src/ios/MyPlugin.m" /> <header-file src="src/ios/MyPlugin.h" /> </platform> <platform name="android"> <source-file src="src/android/MyPlugin.java" /> </platform> </plugin> ``` 4. 安装插件插件添加到 Cordova 项目中: ``` cordova plugin add /path/to/my-plugin ``` 5. 使用插件Cordova 应用程序中使用插件,例如: ```js var myPlugin = cordova.plugins.myPlugin; myPlugin.doSomething(); ``` 以上是 Cordova 插件开发的基本步骤,具体实现需要根据插件的功能和要求进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值