Проблемы с файловым API: каталоги и система в Google Chrome

Прочитав эту статью об использовании API файловой системы HTML5 в Google Chrome, я решил попробовать при включении его в упакованное веб-приложение.

Используя заметки и предоставленный код в качестве руководства, я составил довольно длинный сценарий следующим образом:

var FSA = FSA || {};
var fsys, root, fileReader, dropReader, dropContainer, btn = [];
window.addEventListener("load", function () {
    window.requestFileSystem(PERSISTENT, 5242880 /* ~5MB */, function(fs) {
        fsys = fs;
        root = fsys.root;
    }, FSA.error);
});
function createFile(path) { 
    root.getFile(path, {create:true, exclusive:true}, function() {
        console.log(path+ " file created"); 
    }, FSA.error); 
};
function saveFile(name, data, mimetype) {
    var e = this || null;
    name = name || e.target.name;
    data = data || e.target.result;
    mimetype = mimetype || e.target.type;
    root.getFile(name, {create: true}, function(fileEntry) {
        fileEntry.createWriter(function(writer) {
            writer.onwrite = function(e) {
                console.log(name + ' written successfully to filesystem.');
                FSA.getFile(name);
            };
            writer.onerror = function(e) {
                console.log('Write failed: ' + e);
            };
            var bb = new BlobBuilder();
            bb.append(data);
            writer.write(bb.getBlob(mimetype));
        });
    }, FSA.error);
};
function openFile(file, fileTarget) {
    root.getFile(file.name, null, function(entry) {
        entry.file(function(file) {
                reader = new FileReader();
                reader.filename = file.name;
                reader.onload = function(e) {
                    fileTarget = e.target.result;
                };
                reader.readAsText(file);
        }, FSA.error);
    }, FSA.error);
};

И в какой-то степени это, кажется, работает. Я могу использовать функцию createFile для создания файла и функцию saveFile для сохранения файла. Однако я не могу использовать функцию openFile, и все три функции возвращают следующую ошибку в консоли JavaScript:

Uncaught TypeError: Cannot call method 'getFile' of undefined

Я считаю, что проблема связана с переменной root, но я могу ошибаться.

Поскольку это новый API и к тому же предварительная спецификация, доступно очень мало документации, которая поможет решить эту проблему.

Может ли кто-нибудь указать на проблему (проблемы) и, если да, предложить решение?

Спасибо за вашу помощь.

EDIT: я использую "канареечную сборку 10.0.639.0", поэтому я считаю, что мой браузер должен разрешать использование API в расширениях.


person 木川 炎星    schedule 17.01.2011    source источник
comment
Вы можете попробовать github.com/vitalets/bro-fs для более удобного использования API файловой системы.   -  person vitalets    schedule 24.10.2016


Ответы (1)


На данный момент FileSystem API getFile не работает в расширении ни на одном Chrome 8. Вам нужно будет запустить код на веб-странице, размещенной на внешнем сервере, если вы хотите создавать новые файлы с помощью getFile.

Он будет поддерживаться в Chrome 9+ в расширениях. Для получения дополнительной информации прочитайте HTML5 список рассылки Chromium. сообщение.

Я использую Google Chrome 10.0.634.0 Dev Channel. И в инспекторе:

window.requestFileSystem(PERSISTENT, 5242880 /* ~5MB */, function(fs) {
  root = fs.root;
})
root.getFile

Возвращает:

function getFile() { [native code] }
person Mohamed Mansour    schedule 17.01.2011
comment
Спасибо за ваш комментарий. Я провожу тестирование на канареечной сборке 10.0.639.0. Ваш код возвращает тот же результат в моем браузере. - person 木川 炎星; 17.01.2011
comment
Вы делаете это в расширении или на обычном веб-сайте? - person Mohamed Mansour; 17.01.2011