为了账号安全,请及时绑定邮箱和手机立即绑定

如何将文件上传到 GoogleDrive,并与任何使用 ServiceAccount

如何将文件上传到 GoogleDrive,并与任何使用 ServiceAccount

Go
慕盖茨4494581 2023-02-21 19:12:45
我想上传文件并与从 ServiceAccount Golang 到 GoogleDrive 的任何人共享。但是我陷入了这个错误。我的代码:package mainimport (    "fmt"    "golang.org/x/net/context"    "google.golang.org/api/drive/v3"    "google.golang.org/api/googleapi"    "google.golang.org/api/option"    "log"    "os")func main() {    srv, err := drive.NewService(context.Background(), option.WithCredentialsFile("key.json"))    if err != nil {        log.Fatal("Unable to access Drive API:", err)    }    filename := "./lemon.txt"    file, err := os.Open(filename)    if err != nil {        log.Fatalln(err)    }    stat, err := file.Stat()    if err != nil {        log.Fatalln(err)    }    defer file.Close()    res, err := srv.Files.Create(        &drive.File{            Parents: []string{"17n-EpJcGg0DmmWqSoJ75iIUdXDP7neoH"},            Name:    "banana.txt",            Permissions: []*drive.Permission{                {                    Role: "reader",                    Type: "anyone",                },            },        },    ).Media(file, googleapi.ChunkSize(int(stat.Size()))).Do()    if err != nil {        log.Fatalln(err)    }        fmt.Printf("%s\n", res.Id)}错误:[获取 403][1][1]:https://i.stack.imgur.com/mzwxv.png
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

当我看到你的脚本时,似乎在上传文本文件时,权限数据包含在元数据中。不幸的是,这不能使用。我认为这就是您的问题与 相关的原因writable。在这种情况下,文件上传后,请使用“权限:创建”。当你的脚本被修改时,下面的修改怎么样?


从:

res, err := srv.Files.Create(

    &drive.File{

        Parents: []string{"17n-EpJcGg0DmmWqSoJ75iIUdXDP7neoH"},

        Name:    "banana.txt",

        Permissions: []*drive.Permission{

            {

                Role: "reader",

                Type: "anyone",

            },

        },

    },

).Media(file, googleapi.ChunkSize(int(stat.Size()))).Do()

if err != nil {

    log.Fatalln(err)

}


fmt.Printf("%s\n", res.Id)

到:

res, err := srv.Files.Create(

    &drive.File{

        Parents: []string{"17n-EpJcGg0DmmWqSoJ75iIUdXDP7neoH"},

        Name:    "banana.txt",

    },

).Media(file, googleapi.ChunkSize(int(stat.Size()))).Do()

if err != nil {

    log.Fatalln(err)

}

fmt.Printf("%s\n", res.Id)


res2, err := srv.Permissions.Create(res.Id, &drive.Permission{

    Role: "reader",

    Type: "anyone",

}).Do()

通过此修改,上传的文本文件被公开共享。

笔记:

从您的评论来看I already share my parent_id folder (the folder I want to upload files and share with anyone) with the service_account email as editor permission.,如果您想将文本文件上传到公共共享文件夹"17n-EpJcGg0DmmWqSoJ75iIUdXDP7neoH",我认为也可以使用以下修改后的脚本。因为,在这种情况下,当一个文本文件上传到公共共享文件夹时,上传的文本文件与该文件夹具有相同的权限。


  res, err := srv.Files.Create(

      &drive.File{

          Parents: []string{"17n-EpJcGg0DmmWqSoJ75iIUdXDP7neoH"},

          Name:    "banana.txt",

      },

  ).Media(file, googleapi.ChunkSize(int(stat.Size()))).Do()

  if err != nil {

      log.Fatalln(err)

  }

  fmt.Printf("%s\n", res.Id)


查看完整回答
反对 回复 2023-02-21
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号