【问题标题】:How to set the metadata of file using Drive API?如何使用 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!");
            }
        });

【问题讨论】:

    标签: javascript node.js typescript google-drive-api jwt


    【解决方案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 帐户共享。这样,您可以使用浏览器查看它。请注意这一点。

    参考资料:

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

    【讨论】:

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