Cordova - 将文件保存到存储
Cordova - Save a file to storage
我正在制作一个需要从中导出文件的 Cordova 应用程序。我想将文件保存到 Android 设备的存储空间:/storage/emulated/0/
。该应用程序应创建一个文件夹,它将在其中创建一个包含内容的文件。
我尝试了 cordova-plugin-file
插件,但我不确定如何使用它。 plugin's documentation上有例子,但不知道用哪个,有:
我尝试了所有方法,但是 none 有效。
非常感谢您的帮助和示例(如果可能)。
编辑
这是我使用的代码。我没有收到任何错误。
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 example(因为它未在您的代码中定义),那么将调用 fileWriter.onerror()
函数,错误代码为 NO_MODIFICATION_ALLOWED_ERR
.
您必须写入SD卡上的应用程序存储目录(例如/sdcard/Android/data/your.app.package.id/
)。
您可以使用 cordova-plugin-file
作为 cordova.file.externalApplicationStorageDirectory
.
引用此位置
不同版本Android的SD卡访问详情见。
注意:上面对 "SD card" 的引用是指模拟的 SD 卡(在内部存储器上(即 /storage/emulated/0/
)。引用某些 [=32= 中存在的 external/removable SD 卡] 设备(例如三星 Galaxy S 系列)无法通过 cordova-plugin-file
,但您可以使用 getExternalSdCardDetails() from cordova-diagnostic-plugin 来实现。
此脚本有效:
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
});
});
});
我正在制作一个需要从中导出文件的 Cordova 应用程序。我想将文件保存到 Android 设备的存储空间:/storage/emulated/0/
。该应用程序应创建一个文件夹,它将在其中创建一个包含内容的文件。
我尝试了 cordova-plugin-file
插件,但我不确定如何使用它。 plugin's documentation上有例子,但不知道用哪个,有:
我尝试了所有方法,但是 none 有效。
非常感谢您的帮助和示例(如果可能)。
编辑
这是我使用的代码。我没有收到任何错误。
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 example(因为它未在您的代码中定义),那么将调用 fileWriter.onerror()
函数,错误代码为 NO_MODIFICATION_ALLOWED_ERR
.
您必须写入SD卡上的应用程序存储目录(例如/sdcard/Android/data/your.app.package.id/
)。
您可以使用 cordova-plugin-file
作为 cordova.file.externalApplicationStorageDirectory
.
不同版本Android的SD卡访问详情见
注意:上面对 "SD card" 的引用是指模拟的 SD 卡(在内部存储器上(即 /storage/emulated/0/
)。引用某些 [=32= 中存在的 external/removable SD 卡] 设备(例如三星 Galaxy S 系列)无法通过 cordova-plugin-file
,但您可以使用 getExternalSdCardDetails() from cordova-diagnostic-plugin 来实现。
此脚本有效:
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
});
});
});