【问题标题】:JavaScript can't download images programmatically (getting 403)JavaScript 无法以编程方式下载图像(得到 403)
【发布时间】:2021-08-05 07:24:59
【问题描述】:

在我的网站上,我有一个按钮,每当用户点击它时,它都会随机下载一张图片,下面是下载图片的代码:

const downloadImg = (src) => {
    const imgName = src.replace(/^.*[\\\/]/, '');

    var a = document.createElement('a');
    a.href = src;
    a.download = imgName;
    a.click();
};

这对于来自开放网站(如 google.com 或 Wikipedia commons)的图像完全适用

但是,对于来自诸如 Pixabay、Pexels、Freepik 等网站的图片,它不会下载图片,而是在同一选项卡中打开图片 URL,并在控制台中显示 403 禁止错误

我完全明白为什么会发生这个错误,但我不明白如何解决它?如果我在图像上right-clicked 然后点击save image as 不会出现错误,我将能够正常下载图像,我如何以编程方式使用 javascript 执行此操作?

【问题讨论】:

    标签: javascript image hyperlink download httpforbiddenhandler


    【解决方案1】:

    它使用此处接受的答案中的方法工作:Chrome 65 blocks cross-origin <a download>. Client-side workaround to force download?,稍作改动。不要使用“cors”模式,而是使用“no-cors”。显然,直接从 url 下载时,某些域会出现 cors 错误。

    更新:如果服务器不允许跨域请求,它不起作用。使用“no-cors”发出请求将成功,但响应正文将不可用。所以这不是一个解决方案。

    【讨论】:

    • 感谢您的帮助,不幸的是,这不起作用,它正在强制下载但是当我尝试打开图像时,它给了我一个错误The file “fileName.jpeg” could not be opened because it is empty任何想法如何解决它?
    • 我太急了。我认为“问题”出在服务器端。如果服务器没有发送“Access-Control-Allow-Origin”,则浏览器将不允许您从您的源下载资源。您可以使用“no-cors”提出请求,但您将看不到响应。目前,我认为没有办法克服这个问题:(
    • 哦 :( 嗯谢谢你的帮助,感谢你的时间
    猜你喜欢
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多