Sanity.io API 从 URL 上传图片

Posted

技术标签:

【中文标题】Sanity.io API 从 URL 上传图片【英文标题】:Sanity.io API upload images from URL 【发布时间】:2021-07-19 06:04:39 【问题描述】:

来自 slack#help 频道的交叉帖子...

我正在为一个包含博客组件的客户创建一个 Sanity/Nuxt 站点。他的主要营销来源是 Instagram,由于 Instagram 的 API 只允许单张图片的帖子,我试图以相反的方式进行。我正在设置一个 Netlify 函数,客户端将在其中粘贴到 Instagram 帖子的链接,该函数将使用 /?__a=1 技巧通过 URL 获取所有相关图像,以从 Instagram 获取公共数据。我想做的是从所述 Instagram 帖子中获取所有图像,将它们作为资产上传,然后使用所述上传的图像创建博客帖子。我修改了内置的 Netlify 函数来创建一个 Sanity 文档,我将图像作为 arrayBuffer 提取,将其转换为“base64”,然后尝试上传。

当我尝试运行位于 https://gist.github.com/jeffpohlmeyer/d9824920fc1eb522ceff6380edb9de80 的文件时,我收到以下错误:

body: 
       statusCode: 400,
       error: 'Bad Request',
       message: 'Invalid image, could not read metadata',
       details: 'Input buffer contains unsupported image format'
     ,

谁能建议我可以做到这一点的方法?作为替代方案,我想我可以只链接到 Instagram 上托管的 URL,而不是在 Sanity 中托管图像,但如果例如 Instagram 帖子更改或他想要更改封面图片,则客户很难维护,选择 URL 而不是图像会很困难。

【问题讨论】:

【参考方案1】:

在我的 repl 上尝试了同样的方法:

async function uploadImage()
const image = await axios.get(
    '<<url>>',
     responseType: 'arraybuffer' 
  )
  const data = Buffer.from(image.data, 'binary');

  client.assets
    .upload('image', data)
    .then(() => 
      console.log('Done!')
    )
    .catch((err) => 
      console.log('err', err)
      return  statusCode: 400 
    )

uploadImage();

只需删除完成的 base64 转换,这应该可以工作

【讨论】:

以上是关于Sanity.io API 从 URL 上传图片的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CSV 导入 sanity.io

HttpClient 从 URL 下载图片然后上传图片

Facebook Marketing API:将图片上传到库提供了一个 URL

如何通过api获取rct-image-store的Image URL上传图片

Face.com API 从 python 上传图片

图片上传/接收API