Golang 使用特定路径将图片上传到 GCS

Golang upload image to GCS with specific path

我坚持使用 Google 云存储和 os.create()

这是我的示例代码

func upload(w http.ResponseWriter, r *http.Request) {
     // some process request msg, decode base64 to image byte
    // create image file in current directory with os.create()
    // 
    path := os.create("shop_logo.jpeg")
    bucket := client.Bucket("myBucket")
    write := bucket.Object(path).NewWriter(ctx)
     
}

用目录创建文件

func upload(w http.ResponseWriter, r *http.Request) {
     // some process request msg, decode base64 to image byte
    // create image file in current directory with os.create()
    // 
    path := os.create("home/../project/repo/shop_logo.jpeg") //absolute path
    bucket := client.Bucket("myBucket")
    write := bucket.Object(path).NewWriter(ctx)
     
}

实际上一切正常,比如 mybucket/shop_logo.jpeg
但是我想组织存储桶路径,例如 mybucket/shop_v1/shop_logo.jpeg
但是我用了 os.create() 比如 os.create("shop_v1/shop_logo.jpeg)
不能用,貌似这个功能不能创建文件夹。
但是当我使用 绝对路径 时它起作用了。喜欢 os.create("/home/project/shop_v1/shop_logo.jpeg)
问题是 bucket.Object("path/to/image_file") 需要文件的路径。
所以如果我使用绝对路径上传它。
我的桶将是 myBucket/home/project/shop_v1/shop_logo.jpeg .

但我期待的是mybucket/shop_v1/shop_logo.jpeg

有人知道吗?

哦,我刚刚发现 os.create() 也可以创建目录。

这是我的错

inputPath := "/shop_v1/shop_logo.jpeg"
os.create(inputPath)

应用程序会出错,找不到等等。
我只需要 删除 inputPath 变量

的第一个斜杠
inputPath := "shop_v1/shop_logo.jpeg"
os.create(inputPath)

现在可以了!