FileWriter API: используйте blob для записи данных - PullRequest
3 голосов
/ 03 октября 2011

У меня есть URL-адрес BLOB-объекта, например blob:blahblah, который указывает на файл. Я хочу записать файл за этим большим двоичным объектом в локальную файловую систему. Документация writer.write() гласит, что она принимает файловый объект (из input-type-file) и blob. Но он выдает ошибку несоответствия типов при попытке этого

fileEntry.createWriter(function(writer) {
    writer.write(blob); //blob is a var with the value set to the blob url

Я знаю, что проблема в том, что blob не принимается, но я хотел бы знать, как я могу сохранить большой двоичный объект в файловой системе. я создал указанный BLOB-объект ранее в сценарии из файла ввода-типа и сохранил его значение в переменной.

EDIT

Хорошо, я думаю, мне следовало бы дать больше кода.

Сначала я создаю URL-адрес BLOB-объекта и сохраняю его в виде переменной

files[i]['blob'] = window.webkitURL.createObjectURL(files[i]);

files взят из html-тега input-type-file, и я зациклен на количество файлов. Вы знаете концерт.

затем переменная проходит через несколько сред, сначала через сообщение chrome, передающее api на другую страницу, а затем с этой страницы к работнику через postMessage и затем, наконец, снова на родительскую страницу через postMessage снова.

на последней странице я намереваюсь использовать его для хранения файла блоба в локальной файловой системе через api файловой системы, как это ..

//loop code
fileSystem.root.getFile(files[i]['name'], {create: true}, function(fileEntry) {
    fileEntry.createWriter(function(writer) {
        writer.write(files[i]['blob']);
    });
});
//loop code

но writer.write бросает Uncaught Error: TYPE_MISMATCH_ERR: DOM File Exception 11

Я считаю, что эта ошибка связана с тем, что переменная, переданная в writer.write, является текстом, а не объектом BLOB-объекта из чего-то вроде createObjectUrl (напрямую, а не после прохождения через несколько страниц / областей) или не является window.WebKitBlobBuilder. Итак, как можно использовать URL-адрес блоба для хранения файла?

1 Ответ

1 голос
/ 11 октября 2011

Из вашего отредактированного фрагмента кода и описания звучит так, будто вы пишете blobURL в файловую систему, а не в File (например, files[i]['name'] - это URL). Вместо этого передайте объект File между главной страницей -> другой страницей -> работником -> главной страницей. В последнее время (по крайней мере, в Chrome) ваше путешествие туда и обратно теперь возможно . File объекты могут быть переданы в window.postMessage(), тогда как ранее браузер сериализировал аргумент в строку.

Вы 'формируете' обработчик / ссылку на Blob с createObjectURL(). На самом деле нет способа перейти от blobURL обратно к Blob. Короче говоря, не нужно создавать createObjectURL(). Просто пройдите вокруг files[i] напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...