Как открыть Blob URL на Chrome iOS

Я хотел бы открыть объект Blob в окне браузера.

Этот код работает везде, кроме iOS Chrome (и IE, конечно, но я могу решить IE). Окно не перенаправлено на URL (что является правильным или, по крайней мере, таким же, как в других браузерах). Есть ли известный обходной путь для Chrome iOS?

var blob = new window.Blob(['Hello, world!'], {type: 'text/plain;charset=utf-8'});
window.URL = window.URL || window.webkitURL;
var url = window.URL.createObjectURL(blob);
window.location.href = url;

я пробовал <a href="{blobUrl}> вместо window.location.href но это тоже не работает.

4 ответа

Решение

FileReader решил мою проблему.

var reader = new FileReader();
var out = new Blob([this.response], {type: 'application/pdf'});
reader.onload = function(e){
  window.location.href = reader.result;
}
reader.readAsDataURL(out);

Метод FileReader.readAsBinaryString устарел.

Немного поздно, но мне пришлось сделать нечто подобное, используя FileReader.readAsDataURL - который выдает dataUrl. Я использую сервис AngularJS $http для вызова API для создания PDF. Надеюсь, это поможет, см. Ниже:

$http.post('/api/pdf', {id: '123'}, {responseType: 'arraybuffer'})
    .success(function (response) {
        var blob = new Blob([response.data], {type: 'application/pdf'});
        var reader = new FileReader();
        reader.onloadend = function(e) {
             $window.open(reader.result);
        }
        reader.readAsDataURL(blob);
    });

Ни одно из этих решений не сработало для меня в Safari. Пришлось создать ссылку на странице.

      const downloadBlob = (fileName, blob) => {
  const link = document.createElement('a');
  link.href = URL.createObjectURL(blob);
  link.target = '_blank';
  link.download = fileName;
  document.body.appendChild(link);
  link.click();
}

const blob = new Blob([data], { type: 'video/mp4' });
downloadBlob('myfile.mp4', blob)

Я исправил это, изменив тип содержимого с application/json на application/octet-stream. Мой файл xlsx был загружен как json.

@PostMapping(значение = "/ экспорт", производит = MediaType.APPLICATION_OCTET_STREAM_VALUE)

Другие вопросы по тегам