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

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

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

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!");
            }
        });

最佳答案

  • 您不想让用户下载创建的文件。
  • 您想与作为读者的任何人分享。
  • 您希望使用 googleapis 和 Node.js 来实现此目的。
    • 您的脚本是 typescript 。然后您构建它并使用 Node.js 运行它。
  • 您已经能够使用 Drive API 在 Google 云端硬盘中创建文件。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能答案之一。

修改点:

关于功能:

不幸的是,capability.canDownload 的属性不可写。那么,作为一种方法,使用copyRequiresWriterPermission怎么样?使用此功能,该文件被设置为“禁用评论者和查看者下载、打印和复制的选项”。

关于共享:

shared 的属性也是不可可写的。因此,当您想以读者身份与任何人分享时,请使用“权限:在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: create 的请求正文。

注意:

  • 在您的脚本中,使用服务帐户。因此,如果您想在 Google 云端硬盘中查看上传的文件,请与您的 Google 帐户共享。这样,您就可以使用浏览器看到它。请小心这一点。

引用文献:

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

关于javascript - 如何使用Drive API设置文件的元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59436855/

相关文章:

javascript - Cytoscape 布局 - 找不到这样的布局可乐

javascript - 屏蔽字符串

javascript - Bootstrap 工具提示不适用于鼠标悬停

angularjs - 测量 API 调用所花费的时间

javascript - 如何使用 Node.js 更改 Google Cloud Storage 中的文件元数据

javascript - 如何在类型方法中使用另一个类方法和 this 上下文?

javascript - Vuejs 和 Bootstrap。有条件地禁用按钮组中的按钮

javascript - ExtJS Forms > .getFieldValues() 函数不返回 "timefield"xtype 的任何值

node.js - 未找到 Angular 运行时-es2015.js

javascript - 将base64编码的字符串解码为xls