javascript - google-cloud TypeError:gcs.bucket 不是函数
问题描述
我正在尝试实现云功能,但如果我需要这样会出错
var storage =require('@google-cloud/storage')();
部署时像这样
var storage = require('@google-cloud/storage');
所以我决定按上述方式使用它,但尝试上传图片时出现错误“TypeError:gcs.bucket 不是函数”
const os = require('os');
const path = require('path');
///
exports.onFileChange = functions.storage.object().onFinalize((event) => {
const bucket = event.bucket;
const contentType = event.contentType;
const filePath = event.name;
console.log('Changes made to bucket');
///
if(path.basename(filePath).startsWith('renamed-')){
console.log("File was previously renamed");
return;
}
const gcs = storage({
projectId: 'clfapi'
});
///
const destBucket = gcs.bucket(bucket);
const tmFiilePath = path.join(os.tmpdir(), path.basename(filePath));
const metadata = {contentType: contentType};
///
return destBucket.file(filePath).download({
destination: tmFiilePath
}).then(() => {
return destBucket.upload(tmFiilePath, {
destination: 'renamed-' + path.basename(filePath),
metadata: metadata
})
});
});
解决方案
该 API 在 Cloud Storage 节点 SDK 2.x 版本中发生了变化。根据文档,您可以像这样导入 SDK:
// Imports the Google Cloud client library const {Storage} = require('@google-cloud/storage');
然后你可以创建一个新的 Storage 对象:
// Creates a client const storage = new Storage();
然后你可以伸手去拿一个桶:
const bucket = storage.bucket()
推荐阅读
- chisel - Chisel Bootcamp 2.5 练习,用于转换为基于 tilelink 的 for 和 tester。详细说明但给出 TLMonitor 断言错误
- android-studio - 在 Android Studio 4.0 中找不到“提取字符串资源”选项
- r - 将交互式 Python Bokeh 图转移到 Shiny
- python - Pygame:如何旋转表面区域而不使图像闪烁两次?
- syntax - 为什么 Deno 会标记使用 nodejs 不会发生的语法错误?
- node.js - 机器人:在 20 秒内更改在频道中交谈的权限,创建倒计时并在此过程中删除这些消息
- java - eclipse macosc cocoa 64bit 与 mac64 bit.dmg 安装程序之间的区别
- javascript - 在 knex 中,如何将 async/await 函数更改为使用 .then 方法的函数?
- vue.js - 计算函数忽略 if else 语句
- ruby-on-rails - 将带有列的 PDF 转换为 rails 中的文本