如何在Chrome iOS上打开Blob网址

时间:2014-06-30 07:36:10

标签: javascript ios google-chrome

我想在浏览器窗口中打开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 个答案:

答案 0 :(得分:30)

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);

答案 1 :(得分:7)

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);
    });

答案 2 :(得分:0)

我通过将内容类型从application / json更改为application / octet-stream修复了它。我的xlsx文件以json格式下载。

@PostMapping(值=“ / export”,产生= MediaType.APPLICATION_OCTET_STREAM_VALUE)

答案 3 :(得分:0)

这些解决方案都不适合我在 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)