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

我想上传文件并与从 ServiceAccount Golang 到 GoogleDrive 的任何人共享。但是我陷入了这个错误。


我的代码:

package main


import (

    "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


慕盖茨4494581
浏览 147回答 1
1回答

慕神8447489

当我看到你的脚本时,似乎在上传文本文件时,权限数据包含在元数据中。不幸的是,这不能使用。我认为这就是您的问题与 相关的原因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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go