0

背景

我想使用 Firebase 存储对象生成的下载 url 将图像上传到 Shopify API。我目前正在使用 Firebase 'put' 方法将图像文件 blob 直接添加到 Firebase 存储。我的存储规则允许公共读取和用户授权写入。

const storageRef = storage.ref(storage-path);
storageRef.put(image-file-blob).then(snapshot => {
   snapshot.downloadURL;
});

然后,我将该 URL 从 firebase 传递到云函数,以处理 API 上传到 Shopify。Shopify 的 API 需要访问令牌,因此必须从安全环境上传图像。Shopify 有一个put 方法,通过 base64 或 image src 添加图片。

const imageData = {
   "asset": {
     "key": `assets/image.jpg`,
     "src": firebaseDownloadURL
   }
}

Shopify.put(`/admin/themes/theme-id/assets.json`, imageData, function (err,data, headers) {

});

问题

当我使用上述方法时,Shopify API 从上传的图像返回数据(没有错误),但图像文件大小始终为 0。当我导航到其文件时,图像也不在 Shopify 仪表板中。我认为这是因为图像没有正确处理。

我尝试将各种不同的文件类型和基于 ssl/非 ssl 的文件上传到 Shopify 的 API。除了firebase下载网址外,所有工作都有效。

我认为正在发生的事情

firebase 下载 url 仅可见,只能由浏览器处理。如果第 3 方 api 尝试处理图像,那么他们会遇到限制,因为 url 实际上是对 Firebase 的“获取”请求。

我试过的

我现在不是使用下载 url,而是使用存储中的图像路径在我的云函数代码中获取签名的 url。使用getSignedUrl 方法。这确实有效,但在我的函数中需要一些额外的代码服务器端。我很想将 firebase 下载 url 传递给 Shopify。

问题

  • 第三方库无法直接处理下载 url 是否常见?
  • 有没有人有一个他们曾经用另一个 API 做类似事情的过程(可以是 Shopify 或任何将图像 src 作为参数上传到他们的服务的 api。)?
4

0 回答 0