LINUX.ORG.RU

Javascript и Blob

 , ,


0

2

Здравствуйте, не как не могу разобраться, если создать blob и создать ссылку, и вот потом добавить в этот blob, то содержимое по ссылке не добавляется :(

buffer = [],
blob = new Blob(buffer, {type: "text/plain"});
url = URL.createObjectURL(blob);
a = document.createElement('a');
a.download = "backup.json";
a.href = url;
a.textContent = "Download backup.json";
document.querySelector('body').appendChild(a);
for (var i=0; i<10; i++) {
  buffer.push(i);
  blob = new Blob([blob, buffer], {type: "text/plain"});
  //blob = new Blob(buffer, {type: "text/plain"});
}

Нужно чтоб blob пополнялся после сгенерирования ссылки


На второй строчке забыл квадратные скобки у первого параметра. Самая частая ошибка при попытке создать блоб.

Vit ★★★★★
()
Ответ на: комментарий от jessgt

У тебя по коду в ссылку пихается пустой блоб, там нет содержимого. Расставь console.log и посмотри. Дел на пять минут.

Vit ★★★★★
()
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от Vit

если цикл оставить после создания ссылки, то тогда да, пустой, а если цикл делать перед созданием ссылки, то тогда не пустой, но я и создала эту тему какраз для того чтоб понять как можно пополнять его после создания ссылки, либо пересоздавать эту ссылку, но чтоб путь был тот же

jessgt
() автор топика
Ответ на: комментарий от jessgt
var buffer = [], blob, a;
blob = new Blob(buffer, {type: "text/plain"});
a = document.createElement('a');
a.download = "backup.json";
a.textContent = "Download backup.json";
document.querySelector('body').appendChild(a);
for (var i=0; i<10; i++) {
  buffer.push(i);
  blob = new Blob([blob, buffer], {type: "text/plain"});
  a.href = URL.createObjectURL(blob);
}
anonymous
()
Ответ на: комментарий от jessgt

То, чего ты хочешь - невозможно.

anonymous
()
Ответ на: комментарий от jessgt

Если только грязными методами, перехватывать нажатие на уже соззданную ссылку, отменять нажатие, и триггерить нажатие на другую, созданную из нового блоба. Но это если у тебя все завязано на действия пользователя.

Короче говоря, неясен юзкейс. В том формате, в котором ты ставишь вопрос - нет, нельзя.

anonymous
()
Ответ на: комментарий от jessgt

URL.creteObjectURL не реактивный. Он создает новый иммутабельный объект и всё. Уйти от апдейта href таким макаром не получится.

Не забудь еще URL.revokeObjectURL() дергать вовремя, если он есть, чтобы память не текла.

Vit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.