Google drive api 我能';在我的谷歌硬盘中看不到通过代码创建的文件和文件夹

Google drive api 我能';在我的谷歌硬盘中看不到通过代码创建的文件和文件夹,google-drive-api,Google Drive Api,我是一名网络开发人员,我想从我的商业软件中访问谷歌API,我已经创建了一个驱动器帐户 我想通过代码(VB.NET)创建一个文件夹和文件。我遵循文档,创建了一个JWT(JSONWeb令牌),使用了一个服务帐户 我已经获得了一个访问令牌 现在我想访问谷歌API。 使用控制台应用程序,我创建了一些文件夹,我可以通过代码获得已创建文件夹的列表。 但是我在我的Google Drive帐户中看不到这些文件夹。怎么可能呢 以下是我向服务器发送的请求,以显示文件夹和文件列表: {FILE_ID}?key={AP

我是一名网络开发人员,我想从我的商业软件中访问谷歌API,我已经创建了一个驱动器帐户 我想通过代码(VB.NET)创建一个文件夹和文件。我遵循文档,创建了一个JWT(JSONWeb令牌),使用了一个服务帐户 我已经获得了一个访问令牌

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

以下是我向服务器发送的请求,以显示文件夹和文件列表: {FILE_ID}?key={API_key}

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

{ “种类”:“驱动器#文件”, “id”:“文件id”, “mimeType”:“application/vnd.google apps.folder”(如果是文件夹)/“FILE_mimeType”(如果是文件), “标题”:“文件夹名称”/“文件名称”, ... }

下面是我用来访问GoogleAPI的代码:(VB.NET)

在我的谷歌硬盘中,我没有手动创建文件夹,也没有手动上传文件,我必须通过代码完成所有操作

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


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

{base64格式化JWT头}.{base64格式化JWT请求集}.{base64格式化JWT签名}

我的JWT是:

标题

{
  "alg": "RS256",
  "typ": "JWT"
}
{
  "alg": "RS256",
  "typ": "JWT"
}
索赔集 { “国际空间站”:0123456789@developer.gserviceaccount.com“,//其中'0123456789'是客户端ID。 “范围”:https://www.googleapis.com/auth/drive", “澳元”:https://accounts.google.com/o/oauth2/token", “exp”:timeStamp+3600,//其中“timeStamp”是自1970-01-01T00:00:00以来的秒数。 “iat”:时间戳 }

要写签名,我遵循本页中描述的过程:

编写JWT后,我将其发送到服务器,并在这种模式下得到一个JSON字符串作为响应:

{
  "access_token": "ACCESS_TOKEN", // (e.g.: 1/8xbJqaOZXS...)
  "type_token": "Bearer",
  "expire_in": 3600
}
{
  "access_token": "ACCESS_TOKEN", // (e.g.: 1/8xbJqaOZXS...)
  "type_token": "Bearer",
  "expire_in": 3600
}
当我获得访问令牌(AT)时,我使用它访问Google API;例如:如果我要显示所有文件和文件夹列表, 我发送的请求的标题如下:

授权:持票人 X-JavaScript-User-Agent:Google API浏览器

url:{MY_API_KEY}

但我要强调的是,在列表中有一些项目(使用VB.NET控制台应用程序),而在我的Google驱动器中没有任何项目

所以我得到了访问令牌,但我没有成功访问谷歌API

PS:我需要访问谷歌API而不使用任何浏览器

第二部分:

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

{base64格式化JWT头}.{base64格式化JWT请求集}.{base64格式化JWT签名}

我的JWT是:

标题

{
  "alg": "RS256",
  "typ": "JWT"
}
{
  "alg": "RS256",
  "typ": "JWT"
}
索赔集 { “国际空间站”:0123456789@developer.gserviceaccount.com“,//其中'0123456789'是客户端ID。 “范围”:https://www.googleapis.com/auth/drive", “澳元”:https://accounts.google.com/o/oauth2/token", “exp”:timeStamp+3600,//其中“timeStamp”是自1970-01-01T00:00:00以来的秒数。 “iat”:时间戳 }

要写签名,我遵循本页中描述的过程:

编写JWT后,我将其发送到服务器,并在这种模式下得到一个JSON字符串作为响应:

{
  "access_token": "ACCESS_TOKEN", // (e.g.: 1/8xbJqaOZXS...)
  "type_token": "Bearer",
  "expire_in": 3600
}
{
  "access_token": "ACCESS_TOKEN", // (e.g.: 1/8xbJqaOZXS...)
  "type_token": "Bearer",
  "expire_in": 3600
}
当我获得访问令牌(AT)时,我使用它访问Google API;例如:如果我要显示所有文件和文件夹列表, 我发送的请求的标题如下:

授权:持票人 X-JavaScript-User-Agent:Google API浏览器

url:{MY_API_KEY}

但我要强调的是,在列表中有一些项目(使用VB.NET控制台应用程序),而在我的Google驱动器中没有任何项目

所以我得到了访问令牌,但我没有成功访问谷歌API

PS:我需要访问谷歌API而不使用任何浏览器

非常感谢并致以良好的问候


MP

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

要在用户的驱动器中添加内容,您需要通过常规OAuth 2.0流程从该用户检索凭据。您可以在此页面上找到有关OAuth 2.0的更多信息:

  • :它有一个C语言的快速入门示例,您可以使用

如果希望在不使用OAuth 2.0的情况下查看用户帐户下的文件,则可以向服务帐户授予用户帐户下文件夹的编辑权限

然后,使用服务帐户上载文件时,请确保将父引用ID设置为使用该文件夹ID

文件夹ID在地址栏中确定


希望这有帮助。

不知道给定的解决方案。在添加文件后,我通过添加文件权限做了不同的事情(用户在经典文件上载后调用NodeJS code.insertFile):

请注意,我正在使用JWT和私钥类型的身份验证,以及服务帐户:

exports.authorize = function(callback) {
    if (_tokens && ((_tokens.expiry_date - (new Date()).getTime())>100 )) callback(null, _authClient);
    else {

    var scope = ['https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/drive.appdata', 'https://www.googleapis.com/auth/drive.apps.readonly',
'https://www.googleapis.com/auth/drive.file','https://www.googleapis.com/auth/drive.metadata',
'https://www.googleapis.com/auth/drive.metadata.readonly',
'https://www.googleapis.com/auth/drive.readonly',
'https://www.googleapis.com/auth/drive.scripts'];

    var authClient = new google.auth.JWT(
            '<myServiceAccountClientId - xxx@developer.gserviceaccount.com>',
            '<path to key>.pem',
            ''); //seems we could use an user to impersonate requests, i need to test that..
    authClient.authorize(function(err, tokens) {
        if (err) {
            callback(err);
            return;
        }
        callback(null,authClient);    
    });
    }
};
exports.authorize=函数(回调){
if(_tokens&(_tokens.expiration_date-(new date()).getTime())>100))回调(null,_authClient);
否则{
变量范围=['https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/drive.appdata","h",