登录
首页 >  Golang >  Go问答

使用 Firebase Admin SDK 将文件存储到 Google Cloud Storage

来源:stackoverflow

时间:2024-02-17 22:42:24 100浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《使用 Firebase Admin SDK 将文件存储到 Google Cloud Storage》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

过去几天这一直是令人沮丧的根源,因为文档使它听起来应该很简单。

我有一个在本地运行的简单 http 服务器(最终是 heroku),我想将其用作将文件上传到 firebase cloud storage 的传递。我有一个凭据文件,并且能够成功初始化 firebase 应用程序并验证 jwt,但当我尝试放置对象时,总是收到错误。

这是代码--

func main() {
   config := &firebase.config{
      projectid:     "myproject-id",
      storagebucket: "myproject-id.appspot.com",
   }
   credentialsjson := os.getenv("google_credentials")
   creds := google.credentials{json: []byte(credentialsjson)}
   opt := option.withcredentials(&creds)

   app, err := firebase.newapp(context.background(), config,
    opt)

   if err != nil {
     log.fatalln(err)
   }
   ctx, cancel := context.withtimeout(context.background(), time.second*50)
   defer cancel()

   client, err := app.storage(ctx)
   if err != nil {
     log.fatalln(err)
   }
   fmt.println(client)

   bucket, err := client.defaultbucket()

   object := bucket.object("foo.png")
   wc := object.newwriter(ctx)

   r, err := os.open("/users/foo/test.png")
   defer r.close()

   if _, err = io.copy(wc, r); err != nil {
      log.error(err)
   }

   if err := wc.close(); err != nil {
     fmt.println(err)
     log.error(err)
   }
}

但这就是我运行此代码时得到的结果 --

Post "https://storage.googleapis.com/upload/storage/v1/b/myproject-id.appspot.com/o?alt=json&name=foo.png&prettyPrint=false&projection=full&uploadType=multipart": oauth2: Transport's Source is nil

firebase admin sdk 文档明确指出服务帐户对存储帐户具有完全范围控制,但由于传输令牌源为零,因此正确引导凭据时似乎存在一些错误。


解决方案


如果您要直接初始化 google.Credentials 结构,则必须指定其 TokenSource 字段。单独指定 JSON 是不够的。查看 google.golang.org/api/transport 包是如何实现的:

https://github.com/googleapis/google-api-go-client/blob/144dbf001968463675e3221ab95bce7a93039a28/transport/http/dial.go#L81-L98

注意它如何只关心 creds.TokenSource

将凭据传递到 Admin SDK 的更常见方法是通过 option.WithCredentialsJSON(p []byte)

本篇关于《使用 Firebase Admin SDK 将文件存储到 Google Cloud Storage》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

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