无法使用 eligrey 的文件保护程序打开保存的图像
Saved image cannot be opened using eligrey's filesaver
我正在使用 react
创建前端。
我有一个下载按钮,它会触发一个动作。
该操作将使用 axios.post
调用将 return 文件的服务器。
axios.response
是这样的
resopnse.data: 'binary data of image file'
response.headers: {
cache-control:"public, max-age=0"
content-disposition:"attachment; filename="test.jpg""
content-type:"image/jpeg"
last-modified:"Mon, 22 Jan 2018 18:49:27 GMT"
}
response.data
使用 postman
进行测试,它将响应转换为正确的图像。
现在我要用eligrey's filesaver保存。
这就是我的。
let fileName = getFileNameFromContentDisposition(response.headers);
let blob = new Blob([response.data], {type: response.headers["content-type"]});
fileSaver.saveAs(blob, fileName, true);
使用 Chrome
测试代码。该代码将创建一个 jpeg
文件,但无法打开。
我尝试了 GitHub 和本网站中针对类似问题提供的解决方案。但是 none 它正在工作。
我相信我缺少完成这项工作的琐碎设置。
问题不在图书馆。
axios
是原因。来自 axios
的响应已转换为 json
。所以 binary data
丢失了一些信息。
即使 axios
的回复 blob string
被转换回 blob
。这是一个损坏的 blob
。
解决方法是使用 fetch
,并将响应转换为 response.blob()
。
我正在使用 react
创建前端。
我有一个下载按钮,它会触发一个动作。
该操作将使用 axios.post
调用将 return 文件的服务器。
axios.response
是这样的
resopnse.data: 'binary data of image file'
response.headers: {
cache-control:"public, max-age=0"
content-disposition:"attachment; filename="test.jpg""
content-type:"image/jpeg"
last-modified:"Mon, 22 Jan 2018 18:49:27 GMT"
}
response.data
使用 postman
进行测试,它将响应转换为正确的图像。
现在我要用eligrey's filesaver保存。
这就是我的。
let fileName = getFileNameFromContentDisposition(response.headers);
let blob = new Blob([response.data], {type: response.headers["content-type"]});
fileSaver.saveAs(blob, fileName, true);
使用 Chrome
测试代码。该代码将创建一个 jpeg
文件,但无法打开。
我尝试了 GitHub 和本网站中针对类似问题提供的解决方案。但是 none 它正在工作。
我相信我缺少完成这项工作的琐碎设置。
问题不在图书馆。
axios
是原因。来自 axios
的响应已转换为 json
。所以 binary data
丢失了一些信息。
即使 axios
的回复 blob string
被转换回 blob
。这是一个损坏的 blob
。
解决方法是使用 fetch
,并将响应转换为 response.blob()
。