Google云端硬盘Api v3创建共享文件

时间:2016-09-29 16:17:11

标签: javascript google-drive-api google-oauth

我正在使用Node.js google-api客户端在谷歌驱动器中正常创建文件,当我创建文件时一切正常,这是一个例子:

drive.files.create({
      resource: {
        name: 'Another File 5',
        mimeType: 'text/plain',
      },
      media: {
        mimeType: 'text/plain',
        body: 'It\'s Another Fucking File',
      }

    }, function(err,result){
        if(err) console.log(err) 
        else console.log(result)
    });

现在我想创建一个共享的"shared": true,它会给我这个错误:

drive.files.create({
  resource: {
    name: 'Another File 5',
    mimeType: 'text/plain',
    "shared": true
  },
  media: {
    mimeType: 'text/plain',
    body: 'It\'s Another Fucking File',
  }

}, function(err,result){
    if(err) console.log(err) 
    else console.log(result)
});

错误:

{ [Error: The resource body includes fields which are not directly writable.]
  code: 403,
  errors: 
   [ { domain: 'global',
       reason: 'fieldNotWritable',
       message: 'The resource body includes fields which are not directly writable.' } ] }

我在Google API资源管理器中尝试了此操作,但也出现了同样的错误。

我是谷歌Api的新手并感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

shared的请求正文中没有create属性。这已经讨论过

在Drive API文档的Share Files部分中进行了讨论,您需要致电drive.permissions.create并设置您将与之分享的帐户的相应权限。

我也在API资源管理器上对此进行了测试,但它确实有效。

var fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
drive.permissions.create({
    resource: {
        'type': 'user',
        'role': 'writer',
        'emailAddress': 'example@appsrocks.com'
    }, 
        fileId: fileId,
        fields: 'id',
    }, function(err, res) {
    if (err) {
        // Handle error
        console.log(err);
    } else {
        console.log('Permission ID: ', res.id)
        drive.permissions.create({
            resource: {
                'type': 'domain',
                'role': 'reader',
                'domain': 'appsrocks.com'
            },
            fileId: fileId,
            fields: 'id',
            }, function(err, res) {
                if (err) {
                // Handle error
                console.log(err);
            } else {
                console.log('Permission ID: ', res.id)
            }
        });
    }
});