【问题标题】:How to upload files to Google Cloud Storage Bucket subdirectory如何将文件上传到 Google Cloud Storage Bucket 子目录
【发布时间】:2020-09-23 10:29:28
【问题描述】:

我想使用 Go 将文件上传到谷歌云存储桶子目录。我找到的唯一参考代码是link

wc := client.Bucket(bucket).Object(object).NewWriter(ctx)

这里的object 是你的文件名的字符串,但是文件路径是不允许的。当我使用像/path/filename 这样的文件名时,它会抛出以下错误。仅当您使用filename 时才有效。

连接:无法分配请求的地址

以前我使用 node.js,它工作正常。

await bucket.upload(filePath, { destination: `path/filename`, resumable:false });

如何使用 Go 实现这一目标?

【问题讨论】:

  • 省略前导斜杠。 "path/filename" 应该可以正常工作。
  • 这真的有效!谢谢!!!!!!

标签: go google-cloud-storage


【解决方案1】:

您无法将文件上传到 Google Cloud Storage Bucket 子目录,因为 GCS 上不存在 Subdirectory 的概念。

Google Cloud Storage 对象是一个平面命名空间。

因此,在 GCS 中,您只有存储桶和对象。

您可以在此处找到有关 gsutil 如何提供分层文件树错觉的更多详细信息:

How Subdirectories Work

【讨论】:

    【解决方案2】:

    继续 Node 示例,存储桶始终是顶级存储桶名称。

    子目录成为“文件”的一部分。 GCP 将子目录 + 文件视为一个对象。是的,这是违反直觉的。

    
    const bucketName = 'top-level-bucket-name';
    const subBucketName = 'sub_level/another_sub_level/';
    // Cloud Function uses /tmp not ./tmp
    const directory = './tmp'; 
    const fileName = 'foo.txt';
    
    storage.bucket(bucketName).upload(`${directory}/${fileName}`, { destination: subBucketName + fileName});
    
    

    我遇到了子目录中的连字符不起作用的问题,这就是为什么要使用下划线。

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 2020-06-13
      • 2023-03-14
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2018-12-23
      相关资源
      最近更新 更多