登录
首页 >  Golang >  Go问答

上传文件到Google Cloud Storage Bucket的子目录的方法

来源:stackoverflow

时间:2024-03-25 10:24:33 448浏览 收藏

在 Google Cloud Storage 中,不存在子目录的概念。相反,对象存储桶是一个平面命名空间,仅包含存储桶和对象。因此,无法直接将文件上传到子目录中。 为了模拟子目录结构,可以使用对象名称中的斜杠 (/)。对象名称中的斜杠之前的部分将表示“子目录”,而斜杠之后的名称将表示文件本身。例如,要将文件上传到“path/filename”,可以使用以下 Go 代码: ```go wc := client.bucket(bucket).object("path/filename").newWriter(ctx) ```

问题内容

我想使用 go 将文件上传到 google 云存储桶子目录。我找到的唯一参考代码是链接。

wc := client.bucket(bucket).object(object).newwriter(ctx)

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

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

以前我使用node.js,它工作得很好。

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

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


解决方案


您无法将文件上传到 google cloud storage bucket 子目录,因为 gcs 上不存在 subdirectory 的概念。

google cloud storage 对象是一个平面命名空间。

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

在这里您可以找到有关 gsutil 如何提供分层文件树幻象的更多详细信息:

How Subdirectories Work

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

子目录成为“文件”的一部分。 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});

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

今天关于《上传文件到Google Cloud Storage Bucket的子目录的方法》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>