gpt4 book ai didi

google-drive-api - 我在Google云端硬盘中看不到通过代码创建的文件和文件夹

转载 作者:行者123 更新时间:2023-12-01 10:04:20 52 4
gpt4 key购买 nike

我是一名网络开发人员,我想从我的商业软件访问Google API,我已经创建了一个云端硬盘帐户
我想通过代码(VB.NET)创建一个文件夹和文件。我正在关注文档,创建了JWT(Json Web令牌),使用了服务帐户
并且我已经获得了访问令牌。

现在,我想访问Google API。
使用控制台应用程序,我创建了一些文件夹,并且可以通过代码获得已创建文件夹的列表。
但是我在Google云端硬盘帐户中看不到这些文件夹。这怎么可能?

这是我发送到服务器的请求,以显示文件夹和文件列表:
https://www.googleapis.com/files/ {FILE_ID}?key = {API_KEY}

我获得一个JSON字符串作为响应,其中包含与FILE_ID元素有关的信息。
例如。:

{
“kind”:“drive#file”,
“id”:“FILE_ID”,
“mimeType”:“application / vnd.google-apps.folder”(如果是文件夹)/“FILE_MIMETYPE”(如果是文件),
“title”:“FOLDER_NAME” /“FILE_NAME”,
...
}

这是我用来访问Google API的代码:(VB.NET)

...

Public Function browseFile(ByVal fId As String) As List (Of FileSourceElement)

Dim webclient As New WebClient()
webclient.Headers.Add("Authorization", " Bearer " & _accessToken)
webclient.Headers.Add("X-JavaScript-User-Agent", "Google APIs Explorer")
Dim res As String = webclient.DownloadString("https://www.googleapis.com/drive/v2/files?key=" & _apiKey).Trim()

'res contains the JSON with the informations of the file/folder
...

End Function

Public Sub createContainer(ByVal path As String)
Dim webclient As New WebClient()
webclient.Headers.Add("Authorization", " Bearer " & _accessToken)
webclient.Headers.Add("X-JavaScript-User-Agent", "Google APIs Explorer")
webclient.Headers.Add("Content-Type", "application/json")
webclient.UploadString("https://www.googleapis.com/drive/v2/files", _
"POST", _
"{""title"":""daEliminare2"", ""parents"":[{""id"":""" & path & """}], ""mimeType"":""application/vnd.google-apps.folder""}")
End Sub

...

在我的Google云端硬盘中,我没有手动创建文件夹,也没有手动上传文件,我只能通过代码执行所有操作。

正如我对您所说,我已经成功创建了一个文件夹,并成功打印了文件列表(通过代码),但是在我的GDrive中,UI创建的元素
没有出现。为什么?

我在服务帐户中已经读到,为了获取访问令牌,它需要一个特殊的JSON字符串,称为Json Web令牌(JWT),该字符串由标头组成,
声明集和签名(base64字符串)。
字符串是:

{base64格式的JWT标头}。{base64格式的JWT ClaimSet}。{base64格式的JWT签名}

我的JWT是:

标头
{
"alg": "RS256",
"typ": "JWT"
}

索赔集
{
“iss”:“0123456789@developer.gserviceaccount.com”,//其中“0123456789”是CLIENT_ID。
“scope”:“https://www.googleapis.com/auth/drive”,
“aud”:“https://accounts.google.com/o/oauth2/token”,
“exp”:timeStamp + 3600,//其中“timeStamp”是自1970-01-01T00:00:00以来的秒数。
“iat”:时间戳记
}

要编写签名,我已按照本页中描述的过程进行操作:

https://developers.google.com/accounts/docs/OAuth2ServiceAccount#computingsignature

编写JWT后,我将其发送到服务器,并在此模式下获得JSON字符串作为响应:
{
"access_token": "ACCESS_TOKEN", // (e.g.: 1/8xbJqaOZXS...)
"type_token": "Bearer",
"expire_in": 3600
}

当我获得访问令牌(AT)时,便用它来访问Google API。例如:如果我要显示所有文件和文件夹列表,
我发送的请求具有这样的标头:

授权:承载AT
X-JavaScript-User-Agent:Google API资源管理器

网址: https://www.googleapis.com/drive/v2/files?key= {MY_API_KEY}

但我强调指出,列表中有一些项目(使用VB.NET控制台应用程序),而我的Google云端硬盘中没有任何项目。

因此,我获得了访问令牌,但未成功访问Google API。

PS:我需要不使用任何浏览器即可访问Google API。

第二部分:

我已经阅读了服务帐户中的内容,为了获取Acces令牌,它需要一个特殊的JSON字符串,称为Json Web令牌(JWT),该字符串由标头组成,
声明集和签名(base64字符串)。
字符串是:

{base64格式的JWT标头}。{base64格式的JWT ClaimSet}。{base64格式的JWT签名}

我的JWT是:

标头
{
"alg": "RS256",
"typ": "JWT"
}

索赔集
{
“iss”:“0123456789@developer.gserviceaccount.com”,//其中“0123456789”是CLIENT_ID。
“scope”:“https://www.googleapis.com/auth/drive”,
“aud”:“https://accounts.google.com/o/oauth2/token”,
“exp”:timeStamp + 3600,//其中“timeStamp”是自1970-01-01T00:00:00以来的秒数。
“iat”:时间戳记
}

要编写签名,我已按照本页中描述的过程进行操作:

https://developers.google.com/accounts/docs/OAuth2ServiceAccount#computingsignature

一旦编写了JWT,就将其发送到服务器,并在此模式下得到一个JSON字符串作为响应:
{
"access_token": "ACCESS_TOKEN", // (e.g.: 1/8xbJqaOZXS...)
"type_token": "Bearer",
"expire_in": 3600
}

当我获得访问令牌(AT)时,便用它来访问Google API。例如:如果我要显示所有文件和文件夹列表,
我发送的请求具有这样的标头:

授权:承载AT
X-JavaScript-User-Agent:Google API资源管理器

网址: https://www.googleapis.com/drive/v2/files?key= {MY_API_KEY}

但我强调指出,列表中有一些项目(使用VB.NET控制台应用程序),而我的Google云端硬盘中没有任何项目。

因此,我获得了访问令牌,但未成功访问Google API。

PS:我需要不使用任何浏览器即可访问Google API。

致以真诚的感谢和诚挚的问候

MP

最佳答案

由于您使用的是服务帐户,因此所有文件夹和文件都将在此服务帐户的驱动器中创建,无法通过Web UI进行访问,并且将限制为默认配额。

要将内容添加到用户的云端硬盘中,您将需要执行常规的OAuth 2.0流程以从该用户获取凭据。您可以在以下页面上找到有关OAuth 2.0的更多信息:

  • Retrieve and use OAuth 2.0 credentials
  • Quickstart:您可以使用C#中的快速入门示例。
  • Using OAuth 2.0 to access Google APIs
  • 关于google-drive-api - 我在Google云端硬盘中看不到通过代码创建的文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12211859/

    52 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com