鉴于:使用名称空间的文件夹
访问Google云端硬盘问题:查询:
name='07 Dirname' and mimeType='application/vnd.google-apps.folder' and '0B22uLx7BCvv9T0FWRmNaREY4VEE' in parents and trashed=false
不适用于API,但如果dir中没有空格,则会起作用。 但是,如果您从提供提示的API-Explorer运行它,则查询会起作用:此参数是URL编码的。
但是,当我使用 url.QueryEscape 或 url.PathEscape 对名称字段进行编码时,找不到该文件夹。据我所知,没有必要编码整个查询,只需要参数,但是如何?
THX。
答案 0 :(得分:0)
查询需要进行双重编码才能工作,因此首先在上面给出的搜索中调用url.QueryEscape,然后再在查询字符串上调用url.QueryEscape。
如果你使用Chrome devtools查看API Explorer,你会看到双重编码的值,尽管页面本身有误导性的显示。
e.g。像https://content.googleapis.com/drive/v3/files?q=name%3D%2707+Dirname%27+and+mimeType%3D%27application%2Fvnd.google-apps.folder%27+and+%270B22uLx7BCvv9T0FWRmNaREY4VEE%27+in+parents+and+trashed%3Dfalse&key={APIKEY}
答案 1 :(得分:0)
我找到了访问此目录无效的原因。这是默认范围:
https://www.googleapis.com/auth/drive.file对文件的每个文件访问权限 由应用创建或打开。文件授权是在a上授予的 基于每个用户,并在用户取消对应用程序的授权时撤消。
但是要访问不是由应用程序创建的文件夹,我需要这个:
https://www.googleapis.com/auth/drive完整,宽松的访问范围 所有用户的文件,不包括Application Data文件夹。请求 只有在严格必要时才适用。
可以通过设置配置范围来请求:
func establishConnection() (*drive.Service, error) {
b, err := ioutil.ReadFile("client_secret.json")
if err != nil {
logrus.Fatalf("Unable to read client secret file: %v", err)
}
// If modifying these scopes, delete your previously saved client_secret.json.
config, err := google.ConfigFromJSON(b, drive.DriveScope)
if err != nil {
logrus.Fatalf("Unable to parse client secret file to config: %v", err)
}
return drive.New(getClient(config))
}