如何使用 Drive API 设置文件的元数据?

Posted

技术标签:

【中文标题】如何使用 Drive API 设置文件的元数据?【英文标题】:How to set the metadata of file using Drive API? 【发布时间】:2020-04-13 15:39:28 【问题描述】:

我正在寻找一种上传文件的解决方案 具体元数据!我尝试将canDownload设置为false,但结果没有反映!我想将文件设置为每个人都可以访问。 这是我的代码:

const jwToken = new google.auth.JWT(
            token.client_email,
            null,
            token.private_key,
            ["https://www.googleapis.com/auth/drive"],
            null
        );

        jwToken.authorize((err : any) => 
            if (err) 
                console.log(err);
             else 
                console.log("Authentication Success!");
            
        );

 const metaData = 
            'name': filename,
            "shared": true,
            "capabilities" : 
                    "canDownload": false
            ,
            parents: [folderId]
        ;

        const media = 
            mimeType: 'Application/Pdf',
            body: fileSystem.createReadStream(pathSystem.join(path))
        ;

        drive.files.create(
            auth     : jwToken,
            resource : metaData,
            media    : media,
            fields   : 'id'
        , (err : any, file : any) => 
            if (err) 
                console.log("coming!!");

                throw err;
             else 
                console.log("File Upload Successfully!");
            
        );

【问题讨论】:

【参考方案1】: 您不想让用户下载创建的文件。 您想与任何读者分享。 您希望使用带有 Node.js 的 googleapis 来实现此目的。 您的脚本是打字稿。然后使用 Node.js 构建和运行它。 您已经能够使用 Drive API 将文件创建到 Google Drive。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

修改点:

关于capabilities

很遗憾,capabilities.canDownload 的属性不是writable。这样,作为一种方法,使用copyRequiresWriterPermission怎么样?使用它,文件被设置为“禁止评论者和查看者下载、打印和复制选项”。

关于shared

shared 的属性也不是writable。所以当你想与任何读者分享时,请使用 Permissions: create in Drive API 的方法。

修改后的脚本:

当你的脚本被修改时,请进行如下修改。

发件人:

const metaData = 
           'name': filename,
           "shared": true,
           "capabilities" : 
                   "canDownload": false
           ,
           parents: [folderId]
       ;

       const media = 
           mimeType: 'Application/Pdf',
           body: fileSystem.createReadStream(pathSystem.join(path))
       ;

       drive.files.create(
           auth     : jwToken,
           resource : metaData,
           media    : media,
           fields   : 'id'
       , (err : any, file : any) => 
           if (err) 
               console.log("coming!!");

               throw err;
            else 
               console.log("File Upload Successfully!");
           
       );

收件人:

const metaData = 
  name: filename,
  parents: [folderId],
  copyRequiresWriterPermission: true
;

const media = 
  mimeType: "application/pdf",
  body: fileSystem.createReadStream(pathSystem.join(path))
;
drive.files.create(
  
    auth: jwToken,
    resource: metaData,
    media: media,
    fields: "id"
  ,
  (err: any, file: any) => 
    if (err) 
      console.log(err);
      return;
    
    const fileId = file.data.id;
    console.log(fileId);
    const body = 
      auth: jwToken,
      fileId: fileId,
      requestBody: 
        role: "reader",
        type: "anyone"
      
    ;
    drive.permissions.create(body, (err: any, res: any) => 
      if (err) 
        console.error(err);
        return;
      
      console.log(res.data);
    );
  
);
为了不让用户下载上传的文件,在 Files:create 的请求体中添加了copyRequiresWriterPermission: true。 为了与任何人共享,role: "reader", type: "anyone" 用于 Permissions 的请求正文:创建。

注意:

在您的脚本中,使用了服务帐户。因此,如果您想在 Google Drive 中查看上传的文件,请与您的 Google 帐户共享。这样,您可以使用浏览器查看它。请注意这一点。

参考资料:

Files: create Permissions: create

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

【讨论】:

是的,它正在工作!感谢您的帮助,您的详细解释帮助我轻松解决问题...通过使用服务帐户上传,文件在我的浏览器中可见??但删除由服务帐户上传的浏览器中不起作用的文件.... ....... @Aadarsh velu 感谢您的回复。很高兴您的问题得到解决。 @Aadarsh velu 对于给您带来的不便,我深表歉意。从Yep, it's working! Thanks for your Help, Your Detailed explanation helps me to resolve the problem easily,我了解到您的问题已解决。如果我的理解不正确,请告诉我。我想修改它。

以上是关于如何使用 Drive API 设置文件的元数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用Google Drive API V3与他人共享时设置文件的功能?

如何使用 Autodesk Forge API 将上传的 AutoCAD 文件中的元数据提取到 Web 应用程序中?

从 Google Drive V3 API 中的回收站恢复文件时未设置时间戳

使用 REST api 从 Google Drive 下载图片

如何在Google Drive API上按文件夹获取文件列表

Chrome 应用程序可以直接访问 Google API(如 Drive)(即没有 web 视图)吗?