【发布时间】:2020-03-08 00:23:43
【问题描述】:
我得到了一个事件驱动的 Google Cloud Function (Node JS 10) 的帮助,可以将文件复制到另一个 Google Cloud Storage 存储桶中,并希望能更进一步。
我需要过滤这些触发器文件以仅从一个文件夹及其子目录复制文件,而不是整个存储桶中的任何文件。
所以为免生疑问,如果我有:
bucket-a/folder-1/folder-a/folder-x
bucket-a/folder-2/folder-b/folder-y
bucket-a/folder-3/folder-c/folder-z
我想复制所有登陆 bucket-a/folder-2/folder-b 及其所有子目录的文件。
但不要复制位于文件夹 1、文件夹 3 或其任何子目录中的任何文件。
只是不确定在何处或如何将“if”参数引入已经运行良好的内容。
这是目前为止的代码:
const {Storage} = require('@google-cloud/storage');
const {path} = require('path');
exports.helloGCS = (event, context) => {
const storage = new Storage();
const gcsEvent = event;
const sourceFileBucket = gcsEvent.bucket
const sourcePathOnly = gcsEvent.name
const sourceFolder = sourcePathOnly.split('/').slice(-2)
const destFileBucket = 'my_dest_bucket'
storage
.bucket(sourceFileBucket)
.file(sourcePathOnly)
.copy(storage.bucket(destFileBucket).file(sourceFolder[0] + '/' + sourceFolder[1]));
};
任何帮助将不胜感激。
这是给我 sourcePathOnly 未定义错误的当前代码,并且还在根目录下创建了两个文件夹,folder-2 和 folder-b:
const {Storage} = require('@google-cloud/storage');
const {path} = require('path');
exports.helloGCS = (event, context) => {
const gcsEvent = event;
const storage = new Storage()
// Process only if it's in the correct folder
if (sourcePathOnly.indexOf('folder-2/folder-b') > -1) {
const sourcePathOnly = gcsEvent.name
const sourceFileBucket = gcsEvent.bucket
const sourceFolder = sourcePathOnly.split('/').slice(-2)
const destFileBucket = 'my_dest_bucket'
storage
.bucket(sourceFileBucket)
.file(sourcePathOnly)
.copy(storage.bucket(destFileBucket).file(sourceFolder[0] + '/' +
sourceFolder[1]));
}
}
【问题讨论】:
标签: node.js google-cloud-platform google-cloud-functions google-cloud-storage