使用 Javascript 从 URL 获取 base64 图像
Get base64 image from URL with Javascript
我有一个片段,它从 URL:
请求图像
var toDataURL = url => fetch(url, {mode: "no-cors"})
.then(response => response.blob())
.then(blob => new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onloadend = () => resolve(reader.result)
reader.onerror = reject
reader.readAsDataURL(blob)
}))
toDataURL('https://www.google.hu/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png')
.then(dataUrl => {
console.log('RESULT:', dataUrl)
})
代码片段取自this thread
这段代码请求 google 徽标,并且运行正常。我可以在网络选项卡中看到成功的图像响应,我可以看到图像本身,base64 代码也按原样返回到控制台(您可以通过将其复制并粘贴到 Chrome 控制台来尝试)
但是,如果我将 url 更改为:https://images.dog.ceo/breeds/husky/n02110185_12748.jpg
我没有在控制台中返回 base64 代码。请求成功,在response中可见,但是没有返回base64
我用几张图片尝试过,png
大部分时间都有效,jpeg
从来没有。
FileReader
api 中是否有一些额外的设置我不见了?
如果您查看 images.dog.ceo/breeds/husky/n02110185_12748.jpg
来源,响应 header 不包含 Allow-Access-Control-Origin (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)。
所以从另一个域你永远不会得到这个客户端。但是,如果您打开该位置,然后打开控制台并粘贴您的代码,您将看到 dataURL
将被记录。
考虑 white-listing 个域并在可能的情况下添加适当的 header,以获得一些灵感:
我有一个片段,它从 URL:
请求图像var toDataURL = url => fetch(url, {mode: "no-cors"})
.then(response => response.blob())
.then(blob => new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onloadend = () => resolve(reader.result)
reader.onerror = reject
reader.readAsDataURL(blob)
}))
toDataURL('https://www.google.hu/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png')
.then(dataUrl => {
console.log('RESULT:', dataUrl)
})
代码片段取自this thread
这段代码请求 google 徽标,并且运行正常。我可以在网络选项卡中看到成功的图像响应,我可以看到图像本身,base64 代码也按原样返回到控制台(您可以通过将其复制并粘贴到 Chrome 控制台来尝试)
但是,如果我将 url 更改为:https://images.dog.ceo/breeds/husky/n02110185_12748.jpg
我没有在控制台中返回 base64 代码。请求成功,在response中可见,但是没有返回base64
我用几张图片尝试过,png
大部分时间都有效,jpeg
从来没有。
FileReader
api 中是否有一些额外的设置我不见了?
如果您查看 images.dog.ceo/breeds/husky/n02110185_12748.jpg
来源,响应 header 不包含 Allow-Access-Control-Origin (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)。
所以从另一个域你永远不会得到这个客户端。但是,如果您打开该位置,然后打开控制台并粘贴您的代码,您将看到 dataURL
将被记录。
考虑 white-listing 个域并在可能的情况下添加适当的 header,以获得一些灵感: