[英]Cordova - Save a file to storage
我正在制作需要从中导出文件的Cordova应用程序。 我想将文件保存到Android设备的存储中: /storage/emulated/0/
。 该应用程序应创建一个文件夹,在其中创建包含内容的文件。
我尝试了cordova-plugin-file
插件,但不确定如何使用。 插件的文档中有一些示例,但我不知道使用哪个示例,有:
我尝试了所有这些,但是它们都不起作用。
您的帮助和示例(如果可能)将不胜感激。
有我使用的代码。 我没有任何错误。
function createFile(dirEntry, fileName, fileContent, isAppend) {
dirEntry.getFile(fileName, {create: true, exclusive: false}, function(fileEntry) {
writeFile(fileEntry, fileContent, isAppend);
}, fail);
}
function savePasswords(fileSystem) {
createFile("/sdcard/testFolder", "testfile.txt", "TEST", true);
}
function fail(error) {
alert("ERROR: " + error.code);
}
function request() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, savePasswords, fail);
}
document.addEventListener("deviceready", request, false);
我希望它在名为“ testFolder”的文件夹中创建内容为“ TEST”的文件“ testfile.txt”。
从Android 4.4开始,SD卡根目录( /sdcard/
)是只读的,因此您无法对其进行写入。 假设您在示例代码中对writeFile()
引用引用了cordova-plugin-file示例 (由于未在代码中定义),那么将使用错误代码NO_MODIFICATION_ALLOWED_ERR
调用fileWriter.onerror()
函数。
您必须写入SD卡上的应用程序存储目录(例如/sdcard/Android/data/your.app.package.id/
)。 您可以使用cordova-plugin-file
作为cordova.file.externalApplicationStorageDirectory
来引用此位置。
有关在不同版本的Android中访问SD卡的详细信息,请参见此答案 。
注意:以上对“ SD卡”的引用是指仿真的SD卡(在内部存储器(即/storage/emulated/0/
)上。在某些Android设备(例如Samsung Galaxy S系列)中引用的外部/可移动SD卡是无法通过cordova-plugin-file
,但是您可以使用cordova-diagnostic-plugin中的 getExternalSdCardDetails()进行操作。
该脚本有效:
function writeFile(fileEntry, dataObj) {
// Create a FileWriter object for our FileEntry (log.txt).
fileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function() {
console.log("Successful file write...");
readFile(fileEntry);
};
fileWriter.onerror = function (e) {
console.log("Failed file write: " + e.toString());
};
// If data object is not passed in,
// create a new Blob instead.
if (!dataObj) {
dataObj = new Blob(["Content if there's nothing!"], { type: 'text/plain' });
}
fileWriter.write(dataObj);
});
}
window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function (rootDirEntry) {
rootDirEntry.getDirectory(fileDir, { create: true }, function (dirEntry) {
var isAppend = true;
dirEntry.getFile(fileName, { create: true }, function (fileEntry) {
writeFile(fileEntry, "Content!", isAppend);
// Success
});
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.