我正在构建一个可视化某些数据的Chrome应用。我的数据是单独收集的,并存储在与Chrome应用无关的本地文件夹中。我正在使用Angular + D3,我希望我的应用程序从指定的文件夹中获取数据。我怎么能这样做?
目前,我正在尝试使用$http
服务,但它不能按照我想要的方式运行。这是代码:
var app = angular.module('myApp', []);
app.controller('dataController', ['$scope', '$http', function($scope, $http) {
$http.get('../data/file.json').success(function(data) {
$scope.data = data;
console.log($scope.data);
});
}]);
问题在于,在这种情况下,路径../data/file.json
只能导致应用程序文件夹中的文件,即我无法在文件系统上指定任意目录/文件。我怎么能这样做?一般情况下,我是否可以拥有一个包含Chrome应用可以使用的资源的外部文件夹(只读对我来说足够了)?
答案 0 :(得分:3)
要访问任意目录,您需要使用fileSystem.chooseEntry函数,该函数将提示用户选择目录,然后返回一个句柄。这是一个例子:
您必须先向清单文件添加必要的权限:
"permissions": [
{ "fileSystem":
["directory", "retainEntries"]
}
]
阅读文件:
chrome.fileSystem.chooseEntry({ type: 'openDirectory' }, function (dirEntry) {
dirEntry.getFile('file.json', {}, function (fileEntry) {
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function (e) {
var result = JSON.parse(this.result);
console.log(result);
};
reader.readAsText(file);
});
});
});
要保持对跨会话的目录的访问权限,可以使用retainEntry获取可以保存的ID,然后使用restoreEntry重新获得对目录的访问权限。这样,用户只需选择一次目录。