无法从 firebase 云功能将图像上传到 cloudinary
can't upload image to cloudinary from firebase cloud function
根据 cloudinary 的 documentation,应该可以使用 google 云存储将图像上传到 cloudinary。
然而,当我尝试这样做时,我的云函数日志中出现以下错误。
ENOENT: no such file or directory, open 'gs://my-bucket.appspot.com/01.jpg'
这是我的云函数:
import * as functions from 'firebase-functions';
import * as cloudinary from 'cloudinary';
cloudinary.config({
cloud_name: functions.config().cloudinary.cloudname,
api_key: functions.config().cloudinary.apikey,
api_secret: functions.config().cloudinary.apisecret,
});
export const uploadImageToCloudinary = functions.storage
.object()
.onFinalize(object => {
cloudinary.v2.uploader.upload(
`gs://${object.bucket}/${object.name}`,
function(error, result) {
if (error) {
console.log(error)
return;
}
console.log(result);
}
);
})
我已将 /.wellknown/cloudinary/<cloudinary_cloudname>
添加到我的存储桶中,并在云平台中添加了权限以允许 cloudinary object viewer
访问
我是否缺少额外的步骤 - 我似乎无法正常工作?!
Cloudinary 确实支持 Google 云存储上传,但这是一个相对较新的功能,当前版本的节点 SDK 不处理 gs://
url。
在您的示例中,它试图在本地服务器上解析 gs://
URL 并将图像发送到 Cloudinary,而不是将 URL 发送到 Cloudinary,以便进行提取来自Cloudinary这边。
在将其添加到 SDK 之前,您可以通过触发获取 using the URL-based upload method 或对 SDK 代码进行少量更改来使其正常工作。
具体来说,这是 lib/uploader.js
中的一个小改动 - 您需要在那里添加 gs:
前缀,之后它应该可以正常工作。
差异:
diff --git a/lib/uploader.js b/lib/uploader.js
index 2f71eaa..af08e14 100644
--- a/lib/uploader.js
+++ b/lib/uploader.js
@@ -65,7 +65,7 @@
return call_api("upload", callback, options, function() {
var params;
params = build_upload_params(options);
- if ((file != null) && file.match(/^ftp:|^https?:|^s3:|^data:[^;]*;base64,([a-zA-Z0-9\/+\n=]+)$/)) {
+ if ((file != null) && file.match(/^ftp:|^https?:|^gs:|^s3:|^data:[^;]*;base64,([a-zA-Z0-9\/+\n=]+)$/)) {
return [
params, {
file: file
应用该差异后,我确实成功地从 Google 云存储
中获取了图像
根据 cloudinary 的 documentation,应该可以使用 google 云存储将图像上传到 cloudinary。
然而,当我尝试这样做时,我的云函数日志中出现以下错误。
ENOENT: no such file or directory, open 'gs://my-bucket.appspot.com/01.jpg'
这是我的云函数:
import * as functions from 'firebase-functions';
import * as cloudinary from 'cloudinary';
cloudinary.config({
cloud_name: functions.config().cloudinary.cloudname,
api_key: functions.config().cloudinary.apikey,
api_secret: functions.config().cloudinary.apisecret,
});
export const uploadImageToCloudinary = functions.storage
.object()
.onFinalize(object => {
cloudinary.v2.uploader.upload(
`gs://${object.bucket}/${object.name}`,
function(error, result) {
if (error) {
console.log(error)
return;
}
console.log(result);
}
);
})
我已将 /.wellknown/cloudinary/<cloudinary_cloudname>
添加到我的存储桶中,并在云平台中添加了权限以允许 cloudinary object viewer
访问
我是否缺少额外的步骤 - 我似乎无法正常工作?!
Cloudinary 确实支持 Google 云存储上传,但这是一个相对较新的功能,当前版本的节点 SDK 不处理 gs://
url。
在您的示例中,它试图在本地服务器上解析 gs://
URL 并将图像发送到 Cloudinary,而不是将 URL 发送到 Cloudinary,以便进行提取来自Cloudinary这边。
在将其添加到 SDK 之前,您可以通过触发获取 using the URL-based upload method 或对 SDK 代码进行少量更改来使其正常工作。
具体来说,这是 lib/uploader.js
中的一个小改动 - 您需要在那里添加 gs:
前缀,之后它应该可以正常工作。
差异:
diff --git a/lib/uploader.js b/lib/uploader.js
index 2f71eaa..af08e14 100644
--- a/lib/uploader.js
+++ b/lib/uploader.js
@@ -65,7 +65,7 @@
return call_api("upload", callback, options, function() {
var params;
params = build_upload_params(options);
- if ((file != null) && file.match(/^ftp:|^https?:|^s3:|^data:[^;]*;base64,([a-zA-Z0-9\/+\n=]+)$/)) {
+ if ((file != null) && file.match(/^ftp:|^https?:|^gs:|^s3:|^data:[^;]*;base64,([a-zA-Z0-9\/+\n=]+)$/)) {
return [
params, {
file: file
应用该差异后,我确实成功地从 Google 云存储
中获取了图像