拉动时 Facebook 错误 og:image
Facebook error when pulling og:image
无论出于何种原因,我在 FB 上分享 link 时尝试使用的图像无法加载。给出的确切错误是:
提供og:image,无法下载。发生这种情况的原因有多种,例如您的服务器使用不受支持的内容编码。爬虫接受 deflate 和 gzip 内容编码。
我正在使用 s3 存储桶来保存我的图像,据我所知,该存储桶是 public,我可以在任何浏览器上加载这些图像。我还添加了 og:image、og:image:url、og:image:secure_url、og:image:高度、og:image:宽度和 og:image:type 到元标记,所以就元标记而言,我认为我已经涵盖了所有理由。是否有我应该添加的特定设置?感谢任何帮助
一段时间后我解决了这个问题。事实证明,FB Sharer 不接受 base64 图像。我做的是直接将base64二进制保存到S3,因此FB无法显示图像。
因此,如果有人正在做与我相同的事情,请先将您的 base64 图像保存到 file/directory,然后再将其上传到 S3。
对于其他来到这里的人,我暂时遇到了这个问题。 Facebook Sharing Debugger 异步获取图像并可能给出错误的 404。
我建议再刷几次以确认。
首先我将 HTML 转换为 canvas,然后将 canvas 转换为图像,然后使用 canvas 绘制此图像以裁剪初始图像以摆脱额外 space。完成后,图像被发送到服务器进行存储,并在 og:image 元标记中传递给 FB。
$scope.facebookShared = () ->
$window.open "//www.facebook.com/sharer/sharer.php?u=" + encodeURI($location.absUrl()), "sharer", "toolbar=0,status=0,width=" + 500 + ",height=" + 500 /// this is window for share fb
height=$('.sharing').height()
html2canvas document.body,
onrendered: (canvas) ->
context = canvas.getContext('2d')
image = new Image()
image.src = canvas.toDataURL("image/png")
image.onload = ->
sharing=$('.sharing')
canvas.height = Math.round(sharing.width()/1.91)
canvas.width = sharing.width()
context=canvas.getContext('2d')
pos = sharing.parent(0).parent(0).position()
context.drawImage(this, pos.left, pos.top, sharing.width() + 20, sharing.height(),0,0,sharing.width()+20,sharing.height())
$.ajax
url: '../../save_img'
type: 'post'
beforeSend: (xhr) ->
xhr.setRequestHeader "X-CSRF-Token", $("meta[name=\"csrf-token\"]").attr("content")
return
data:
base64_image: canvas.toDataURL("image/png").replace(/^data:image\/(png|jpg);base64,/, "")
claim_slug: $scope.claim.slug
return false
width: $('.claim-page ').width()
height: height+115
return
就我而言,这是由于图像的扩展。
我将 .PNG 更改为 .JPEG 并开始工作。
所以请尝试更改您的扩展名,然后重试。
无论出于何种原因,我在 FB 上分享 link 时尝试使用的图像无法加载。给出的确切错误是:
提供og:image,无法下载。发生这种情况的原因有多种,例如您的服务器使用不受支持的内容编码。爬虫接受 deflate 和 gzip 内容编码。
我正在使用 s3 存储桶来保存我的图像,据我所知,该存储桶是 public,我可以在任何浏览器上加载这些图像。我还添加了 og:image、og:image:url、og:image:secure_url、og:image:高度、og:image:宽度和 og:image:type 到元标记,所以就元标记而言,我认为我已经涵盖了所有理由。是否有我应该添加的特定设置?感谢任何帮助
一段时间后我解决了这个问题。事实证明,FB Sharer 不接受 base64 图像。我做的是直接将base64二进制保存到S3,因此FB无法显示图像。
因此,如果有人正在做与我相同的事情,请先将您的 base64 图像保存到 file/directory,然后再将其上传到 S3。
对于其他来到这里的人,我暂时遇到了这个问题。 Facebook Sharing Debugger 异步获取图像并可能给出错误的 404。
我建议再刷几次以确认。
首先我将 HTML 转换为 canvas,然后将 canvas 转换为图像,然后使用 canvas 绘制此图像以裁剪初始图像以摆脱额外 space。完成后,图像被发送到服务器进行存储,并在 og:image 元标记中传递给 FB。
$scope.facebookShared = () ->
$window.open "//www.facebook.com/sharer/sharer.php?u=" + encodeURI($location.absUrl()), "sharer", "toolbar=0,status=0,width=" + 500 + ",height=" + 500 /// this is window for share fb
height=$('.sharing').height()
html2canvas document.body,
onrendered: (canvas) ->
context = canvas.getContext('2d')
image = new Image()
image.src = canvas.toDataURL("image/png")
image.onload = ->
sharing=$('.sharing')
canvas.height = Math.round(sharing.width()/1.91)
canvas.width = sharing.width()
context=canvas.getContext('2d')
pos = sharing.parent(0).parent(0).position()
context.drawImage(this, pos.left, pos.top, sharing.width() + 20, sharing.height(),0,0,sharing.width()+20,sharing.height())
$.ajax
url: '../../save_img'
type: 'post'
beforeSend: (xhr) ->
xhr.setRequestHeader "X-CSRF-Token", $("meta[name=\"csrf-token\"]").attr("content")
return
data:
base64_image: canvas.toDataURL("image/png").replace(/^data:image\/(png|jpg);base64,/, "")
claim_slug: $scope.claim.slug
return false
width: $('.claim-page ').width()
height: height+115
return
就我而言,这是由于图像的扩展。 我将 .PNG 更改为 .JPEG 并开始工作。 所以请尝试更改您的扩展名,然后重试。