我想实现的目标:
当用户单击按钮时,图像应保存到“照片”。
当前的行为是什么:
单击时,用户将被发送到一个新页面,其中只有该图像存在。
<a href={imageUrl} target="_blank">button</a>
点击后,系统会询问用户是否要下载图像。接受后,图像将保存在OneDrive中,而不是他们的照片中,这导致他们无法找到它。
export const downloadFile = (url: string, filename: string) => {
fetch(url)
.then(response => {
response.blob().then(blob => {
let url = window.URL.createObjectURL(blob);
let a = document.createElement('a');
a.href = url;
a.download = filename;
a.click();
a.remove();
});
});
}
有没有更好的方法让用户直接下载图片到他们的照片,而不是上面两个操作中的任何一个?
更新:
尝试使用mime-type和content-disposition,仍然发送到File而不是Photos。
当我在iOS上打开链接时,它会弹出一个如下对话框:
当我点击“查看”时,它会打开一个显示图像的页面。
当我点击“下载”时,它会直接下载到我的iCloud Drive,而不让我选择将其保存在我的照片中。
3条答案
按热度按时间pgky5nke1#
如果您的后端服务器定义的图像资源为
Content-Disposition
(rfc这里为https://datatracker.ietf.org/doc/html/rfc6266),您可以让浏览器触发window.location.assign("[image-url]")
图像下载。请注意,您必须根据后端服务器实现上的图像格式(.jpg、.png或其他)正确响应
Content-Type
头。sgtfey8w2#
如果你只想下载一个图像,也许你可以试试这个代码
然后你可以在你的组件中调用这个函数。例如:
5cnsuln73#
您可以使用一个名为File-saver的库。阅读更多关于here。它有一个
saveAs()
函数,你可以这样使用:希望这对你有帮助。