总是无法下载blob(使用reactjs)

时间:2016-10-28 14:36:01

标签: javascript reactjs blob

我有这个代码来下载一个从json生成的xml文件。我使用一个名为jsonToSsXml()的函数执行此操作。这很好用。但是当我想下载时,并非每次下载都有效。我没有错误消息,我放了一些console.log来查看是否生成了blob并且确实

var download = function(content, filename, contentType) {
    if(!contentType) contentType = 'application/octet-stream';
    var a = document.getElementById('excel');
    var blob = new Blob([content], {'type':contentType});
    a.href = window.URL.createObjectURL(blob);
    console.log(a.href); //blob:http://mydomain/c72b5368-1fd1-48a1-9b32-858e8d3ab6b5
    a.download = filename;
    console.log(a.download);//formulario.xls
    //window.URL.revokeObjectURL(blob);
};
download(jsonToSsXml(campos), 'formulario.xls', 'application/vnd.ms-excel');

正如我所说,它在某些情况下有效,有些则没有。它对我的内容"不会有问题。值,它是一个简单的xml,它们都是生成好的。我对下载函数的最后一行进行了注释(URL.revokeObjectURL方法),因为我不确定如何使用它以及它是否在这种情况下有所作为。有提示吗?

编辑:在随机情况下(但总是使用相同的文件)我收到404错误,找不到该文件,但blob网址始终是以console.log显示的方式生成的。

1 个答案:

答案 0 :(得分:0)

我需要延迟:

setTimeout(function(){
    document.body.removeChild(a);
    window.URL.revokeObjectURL(url);  
}, 100);

从中得到答案:Blob createObjectURL download not working in Firefox (but works when debugging)