谷歌驱动器API V3如何正确转义查询参数



给定:使用名称中包含空格的某些文件夹对Google云端硬盘进行工作访问

问题:查询:

name='07 Dirname' and mimeType='application/vnd.google-apps.folder' and '0B22uLx7BCvv9T0FWRmNaREY4VEE' in parents and trashed=false

不适用于 API,但如果目录中没有空间,则有效。但是,如果您从 API 资源管理器运行它,该查询确实有效,该资源管理器提供提示:此参数是 URL 编码的

但是,当我使用 url 对名称字段进行编码时。查询转义网址。找不到 PathEscape 文件夹。据我了解,没有必要对整个查询进行编码,只需对参数进行编码,但是如何编码?

感谢。

查询需要双重编码才能工作,因此请调用 url。QueryEscape 首先在上面给出的搜索上,然后再次在查询字符串上。

如果您查看带有Chrome开发工具的API资源管理器,尽管页面本身显示具有误导性,但您会看到双重编码值。

例如,类似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}

我找到了访问此目录不起作用的原因。这是默认范围,即:

https://www.googleapis.com/auth/drive.file 按文件访问文件 由应用创建或打开。文件授权授予于 基于每用户,并在用户取消对应用的授权时被吊销。

但是要访问不是由应用程序创建的文件夹,我需要这个:

https://www.googleapis.com/auth/drive 完整、宽松的访问范围 用户的所有文件,但"应用程序数据"文件夹除外。请求 仅在绝对必要时才使用此范围。

可以通过设置配置的范围来请求,如下所示:

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))
}

最新更新