我正在使用Golang作为我的一个小项目,目前正在尝试根据文件系统路径(在云端硬盘中)和电子表格/工作表名称提取电子表格ID。但是,通过浏览Golang中的API库,我没有看到允许我这样做的功能。
我对这种编程很新,如果这有一个简单的解决方案,请提前抱歉。
谢谢!
答案 0 :(得分:1)
您可以在Google的Drive API中使用drive.files.list
。 drive.files.list
可以使用您的Google云端硬盘中的文件夹信息搜索文件。
从你的问题来看,我想了两步。
使用drive.files.list
搜索文件。可以同时检索文件ID和父文件夹ID。在这种情况下,字段是id和parent。
使用drive.files.get
从文件夹ID中检索文件夹名称。该字段是名称。
您可以使用从每个文件中获取的文件夹信息来创建文件树。
关于示例脚本,它使用Go Quickstart for Drive API(https://developers.google.com/drive/v3/web/quickstart/go)请将main()
的脚本“步骤3:设置示例”更改为以下脚本。
脚本:
func main() {
ctx := context.Background()
b, err := ioutil.ReadFile("client_secret.json")
if err != nil {
log.Fatalf("Unable to read client secret file: %v", err)
}
// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/drive-go-quickstart.json
config, err := google.ConfigFromJSON(b, drive.DriveMetadataReadonlyScope)
if err != nil {
log.Fatalf("Unable to parse client secret file to config: %v", err)
}
client := getClient(ctx, config)
srv, err := drive.New(client)
if err != nil {
log.Fatalf("Unable to retrieve drive Client %v", err)
}
r, err := srv.Files.List().PageSize(10).
Fields("nextPageToken, files(id, name)").Do()
if err != nil {
log.Fatalf("Unable to retrieve files: %v", err)
}
// From here, it's sample script.
searchfile := "filename"
r, err := srv.Files.List().
Q("name=\"" + searchfile + "\" and trashed=false").Fields("files(id,parents)").Do() // "trashed=false" doesn't search in the trash box.
if err != nil {
log.Fatalf("Error: %v", err)
}
for _, i := range r.Files {
r, err := srv.Files.Get(i.Parents[0]).Fields("name").Do()
if err != nil {
log.Fatalf("Error: %v", err)
}
fmt.Printf("FileID=%s, FolderID=%s, FolderName=%s\n", i.Id, i.Parents[0], r.Name)
}
}
结果:
FileID=#####, FolderID=#####, FolderName=#####
Google云端硬盘上的文件可以包含多个父文件夹。在此脚本中,它假定每个文件都有一个父文件夹。如果您的文件有多个父文件夹,请从父数组中检索其文件夹。
参考文献:
drive.files.list https://developers.google.com/drive/v3/reference/files/list
drive.files.get https://developers.google.com/drive/v3/reference/files/get
Go API的快速入门 https://developers.google.com/drive/v3/web/quickstart/go
对不起我的英语很差。