从 API 下载文件

Downloading a file from an API

提问人:Federico Pavone 提问时间:7/19/2023 最后编辑:Brian Tompsett - 汤莱恩Federico Pavone 更新时间:7/22/2023 访问量:44

问:

我需要下载来自 API 调用的文件,我已经尝试了几乎所有方法,最后一次尝试是使用我在 API 中收到的“文件”创建一个 blob,我该怎么做?

if(tipo_societa == "Società di Capitali"){
    id_visura = document.getElementById("id_visura").value;

    axios.get('https://visurecamerali.openapi.it/ordinaria-societa-capitale/' + id_visura + '/allegati', {
        headers:{
            'Authorization': 'Bearer ' + '{Token_Censored}'
        }
    })
    .then ( (res) => {

        data = res.data.data;

        console.log(data);
        
        /* Apri una nuova scheda con l'url */

        var url = window.URL.createObjectURL(new Blob([data.file]));
        var link = document.createElement('a');
        link.href = url;
        link.setAttribute('download', data.nome);
        document.body.appendChild(link);
        link.click();

    })
}

API 的响应如下:

尺寸:90800
文件:“UEsDBBQAAAAIABZc81ZGgkHU4mEBAOiFAQAcABwANjRiNTE0M(it's much more long)”
nome: “64b51417f6ea811bc50ef8c9.zip”

有人可以帮我吗?

我试图制作一个 blob 来下载文件,下载开始,但下载的文件无法打开,例如损坏或类似的东西,理论上这需要下载包含 PDF 文件的 zip。

JavaScript 文件 下载

评论

0赞 ADyson 7/19/2023
API 文档说文件数据将以什么格式提供?据猜测,从您展示的内容来看,它可能是 base64,但我不确定。您确实需要检查信息,以便我们确定。
0赞 Federico Pavone 7/19/2023
A.yson这就是问题所在,文档没有说什么,对于这个调用的解释是这样的:“这个方法允许你下载由请求传递的id生成的文档”,没有别的,我联系了很多次,但没有人回复,所以idk该怎么办
0赞 ADyson 7/19/2023
是否有指向文档的链接,我们也可以在其中查看它?
0赞 Federico Pavone 7/19/2023
当然,那里:developers.openapi.it/categories/business_information/......
1赞 Federico Pavone 7/19/2023
好的,谢谢大家,在你的帮助下,我已经解决了这个问题:“element.setAttribute('href', 'data:text/plain;base64,' + data.file);“,现在一切正常。

答:

1赞 Federico Pavone 7/19/2023 #1

最后,我通过指定来自 api 的字符串是 base64 解决了这个问题,我保留了下面的代码,以防其他人遇到同样的问题

data = res.data.data;

console.log(data);
                    
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;base64,' + data.file);
element.setAttribute('download', data.nome);

element.style.display = 'none';
document.body.appendChild(element);

element.click();

document.body.removeChild(element);

非常感谢你回答了这个问题,让我找到了解决方案^^