我正在使用 Google Cloud 工作流程,我想根据 Google Cloud Storage 中是否存在文件来控制接下来发生的情况。
我可以成功使用 Cloud Storage Connector for Workflows 检索位于存储桶根目录中的对象的元数据,但是当我尝试从顶层以下的任何级别目录中检索元数据时,我收到 404 错误.
注意,我知道严格来说存储桶没有目录,我们看到的文件路径实际上只是对象名称的一部分,但这似乎是描述我的问题的最简单方法。
示例代码如下:
这按预期工作:
# target object is gs://bucket-name/test_file.txt
main:
steps:
- file_init:
assign:
- bucket: bucket-name
- object: test_file.txt
- fetch_file_details:
call: googleapis.storage.v1.objects.get
args:
bucket: ${bucket}
object: ${object}
result: getResult
- out:
return: ${getResult}
然而这并没有(目标文件肯定在它应该在的地方):
# target object is gs://bucket-name/folder/test_file.txt
main:
steps:
- file_init:
assign:
- bucket: bucket-name
- object: folder/test_file.txt
- fetch_file_details:
call: googleapis.storage.v1.objects.get
args:
bucket: ${bucket}
object: ${object}
result: getResult
- out:
return: ${getResult}
我假设对象名称存在一些微妙的语法问题,但我尝试了许多不同的组合,但似乎没有任何效果。我尝试过使用单引号、双引号、CRLF、LF 等。所有常见的罪魁祸首,但没有任何效果。
我做错了什么?
我认为这是建立在 Roopa M 提供的链接之一中的一些内容的基础上的,但技巧是对象路径中的“/”需要编码为“%2F”
所以现在可以使用以下方法:
# target object is gs://bucket-name/folder/test_file.txt
main:
steps:
- file_init:
assign:
- bucket: bucket-name
- object: folder%2Ftest_file.txt
- fetch_file_details:
call: googleapis.storage.v1.objects.get
args:
bucket: ${bucket}
object: ${object}
result: getResult
- out:
return: ${getResult}