使用axios

时间:2019-12-24 07:34:41

标签: javascript reactjs axios fetch

我有一个图像裁剪器,可以为每种裁剪创建一个blob文件。

当用户完成裁剪后,他单击一个成功按钮,然后我得到一个如下所示的URL: blob:https://localhost:5001/4434606b-29c4-483d-a1fc-1cefe50a3e3a”。由于我需要一个文件对象(因此我可以将其发布到服务器上),因此我可以使用以下代码将此blob转换为实际的文件对象:

const file = await fetch(blobUrl).then(r => r.blob()).then(blobFile => new File([blobFile], fileName, { type: blobFile.type }));

此代码有效,但不幸的是,我需要提供IE11支持,并且由于不支持fetch(并且polyfills似乎不适用于此fetch调用),我想将此语句迁移到axios(我已经使用过)遍及我的应用程序。)

这是我尝试过的:

axios.get(blobUrl).then(r => r.blob()).then(blobFile => new File([blobFile], fileName, { type: blobFile.type }));

当我看第一通电话(then(r => r.blob())的响应时,会得到如下信息: enter image description here

我认为这是因为图像无法在控制台中显示,但是当我尝试调用“ r.blob()”时,我得到了:

  

r.blob不是函数

如何将axios调用更改为像上面的fetch调用一样工作?

旁注:我不知道我的回复将具有哪种文件类型(除了它是图像),因此它可能是png,jpg,gif等。

2 个答案:

答案 0 :(得分:1)

设置axios标头:

axios.get(blobUrl, {
       responseType: 'blob'  /* or responseType: 'arraybuffer'  */         
})
.then(r => r.blob())
.then(blobFile => 
     new File([blobFile], fileName, { type: blobFile.type })
);

答案 1 :(得分:0)

显然,我尝试的方法有些过分。这是对我有用的解决方案:

const config = { responseType: 'blob' };
axios.get(blobUrl, config).then(response => {
    new File([response.data], fileName);       
});