图片能加载却不能是为什么?

发布于 2022-09-12 13:58:06 字数 1621 浏览 30 评论 0

需求背景是这样的,图片批量下载,但由于都是外链,就要跨域用canvas绘出来再下载,然后问题是,有两种外链,一种是http://image/123.jpg,这种可以请求下来并成功下载;但是另一种是http://image/123.jpg?accessKe...,这种就各种报错了。

相关代码如下:

            var canvas = document.createElement('canvas');
            var img = document.createElement('img');
            img.setAttribute("crossOrigin",'Anonymous');
            var timestamp = Date.parse(new Date());
            img.src = item.url.indexOf('?') > -1 ? item.url+'&v='+timestamp:item.url+'?v='+timestamp;
            img.onload = function(e) {
                canvas.width = img.width;
                canvas.height = img.height;
                var context = canvas.getContext('2d');
                context.drawImage(img, 0, 0, img.width, img.height);
                canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);
                
                canvas.toBlob((blob)=>{
                 let link = document.createElement('a');
                 link.href = window.URL.createObjectURL(blob);
                 link.download = item.name+timestamp;
                 link.click();
                }, "image/jpeg");
            }

报错信息如下:
image.png

我的问题是:无法下载的这部分外链,是否是因为验证信息造成的?如果不是,那是什么原因?如果是,为什么这种图片能打开查看但却不能请求下来用呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

荭秂 2022-09-19 13:58:06

跨域了.
简单的解决办法是让后端增加一个接口,用于代理图片
/api/proxyimage?url=.该接口接受一个图片链接,再流式返回图片数据即可.
前端在图片链接前面拼上接口即可.

梦归所梦 2022-09-19 13:58:06

图片能加载可以看看是否因为设置过crossOrigin

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文