背景
我想使用 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。)?