我为Google Chrome创建了一个应用程序,用于将文件存储到文件系统中。 我可以读取此文件,但每次我尝试导出它时,它都不起作用。 我尝试了一些方法:
但它们不起作用。
Replacement for fileEntry.toURL() in Chrome Packaged Apps谈论我的问题.. 所以我把代码改成了
function readFileRdf() {
window.requestFileSystem(window.PERSISTENT, 5*1024*1024, function(filesystem) {
fs = filesystem;
fs.root.getFile('rdf.txt', {create: false}, function(fileEntry) {
// Get a File object representing the file,
// then use FileReader to read its contents.
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(e) {
fromFileSystemRdf = e.target.result;
arr = fromFileSystemRdf;
exportRdf(arr);
};
reader.readAsText(file);
}, errorHandler);
}, errorHandler);
});
}
和
function exportRdf(arr){
console.log(arr);
chrome.fileSystem.chooseEntry({type: 'saveFile'}, function(writableFileEntry) {
writableFileEntry.createWriter(function(writer) {
writer.onerror = errorHandler;
writer.onwriteend = function(e) {
console.log('write complete');
};
console.log(arr);
writer.write(new Blob([arr], {type: 'text/plain'}));
}, errorHandler);
});
}
最后一个问题是我在 createWriter
时遇到错误响应fileSystem.chooseEntry时出错:TypeError:无法调用未定义的方法'createWriter'
Up ..添加一个console.log(chrome.runtime.lastError);它说
对象{消息:“无效的呼叫页面。无法从后台页面调用此功能。”}
问题解决了。 由于无法从后台页面调用方法,我使用了这个解决方案: (请记住,Google Chrome不接受内联javascript)
按下导出按钮
`document.getElementById("button2").addEventListener("click",readFileRdf);`
方法readFileRdf创建一个新页面:
function readFileRdf() {
chrome.app.window.create("data.html");
}
data.html 调用data.js文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Data page</title>
</head>
<body>
</body>
<script rel="text/javascript" src="data.js"></script>
</html>
和 data.js 允许用户从文件系统中读取文件并下载
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
function initFs() {
window.requestFileSystem(window.PERSISTENT, 5*1024*1024, function(filesystem) {
fs = filesystem;
readFile(fs);
}, errorHandler);
}
function readFile(fs) {
fs.root.getFile('rdf.txt', {create: false}, function(fileEntry) {
// Get a File object representing the file,
// then use FileReader to read its contents.
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(e) {
fromFileSystemRdf = e.target.result;
arr = fromFileSystemRdf;
exportRdf(arr);
};
reader.readAsText(file);
}, errorHandler);
}, errorHandler);
}
function exportRdf(arr){
console.log(arr);
chrome.fileSystem.chooseEntry({type: 'saveFile'}, function(writableFileEntry) {
console.log(chrome.runtime.lastError);
writableFileEntry.createWriter(function(writer) {
writer.onerror = errorHandler;
writer.onwriteend = function(e) {
console.log('write complete');
};
writer.write(new Blob([arr], {type: 'text/plain'}));
}, errorHandler);
});
}
initFs();