Как открыть 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)