【问题标题】:Update "shared" state of a file/folder with google drive API使用 google drive API 更新文件/文件夹的“共享”状态
【发布时间】:2022-01-26 15:38:35
【问题描述】:

我无法解决如何使用 google drive API 将 "shared" 状态更改为 false

这是我的工作:

  1. 我获取我所有的文件夹和文件,女巫是公开的 [this 一][1] (我用q:"'me' in owners and visibility != 'limited'"过滤器)

  2. 我获取文件/文件夹 ID 并将其放入 [另一个][2] 在响应对象中,我得到了我想要更改的这一行:"shared": true

我无法将其设置为 false,有人知道吗?

祝你有美好的一天


编辑:我使用 NodeJs(netlify 函数),这是我获取文件和文件夹的代码:

const { google } = require('googleapis')
const CLIENT_ID = process.env.CLIENT_ID
const CLIENT_SECRET = process.env.CLIENT_SECRET
const REDIRECT_URI = 'https://developers.google.com/oauthplayground'

const REFRESH_TOKEN = process.env.REFRESH_TOKEN

exports.handler = async () => {
  const oauth2Client = new google.auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI)
  oauth2Client.setCredentials({ refresh_token: REFRESH_TOKEN })

  const drive = google.drive({
    version: 'v3',
    auth: oauth2Client,
  })

  try {
    const result = await drive.files.list({
      q:"'me' in owners and visibility != 'limited'"
    })

    return {
      statusCode: 200,
      headers: {
        'Access-Control-Allow-Origin': '*',

      },
      body: JSON.stringify({ ...result, Body: result.toString('utf-8') })
    }
  } catch (e) {
    console.log(e.message)
    return { statusCode: 500, body: e.message }
  }
}

要更改可见性(“shared”:true -> “shared”:false), 我试过@Tanaike 回答:

const fetch = require('node-fetch')

const API_ENDPOINT_A = 'DELETE https://www.googleapis.com/drive/v3/files/'
const API_ENDPOINT_B = '/permissions/anyoneWithLink'

exports.handler = async (event) => {
  try {
    const itemId = '1-7ESYk_zKJ5Sdfg_z-XiuoXxrKKpHwSa' // event.queryStringParameters.itemId
    const response = await fetch(API_ENDPOINT_A + itemId + API_ENDPOINT_B)
    const data = await response.json()
    return {
      statusCode: 200,
      headers: {
        'Access-Control-Allow-Origin': '*'
      },
      body: JSON.stringify({ data })
    }
  } catch (error) {
    console.log(error)
    return {
      statusCode: 500,
      body: JSON.stringify({ error: 'Failed fetching data' })
    }
  }
}

但我不知道如何传递我的私人信息(api 密钥...),我使用 OAuth 2 进行获取,我是否也应该使用它来编辑可见性? [1]:https://developers.google.com/drive/api/v2/reference/files/list [2]:https://developers.google.com/drive/api/v2/reference/files/patch

【问题讨论】:

    标签: node.js google-drive-api


    【解决方案1】:

    如果我理解正确,您看不到可以将文件更改为“共享”的位置:true。如果是这样,在您从官方文档中提供的同一链接中,您可以在“请求正文”中找到它。

    【讨论】:

      【解决方案2】:

      来自I fetch all my folders & files witch are public with this one (I use q:"'me' in owners and visibility != 'limited'" filter),当您想将公开共享的权限更改为受限时,您可以使用 Drive API 来实现,如下所示。

      请求:

      使用Permissions: delete

      DELETE https://www.googleapis.com/drive/v3/files/###fileId###/permissions/anyoneWithLink
      

      示例卷曲:

      curl --request DELETE \
        -H 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
        'https://www.googleapis.com/drive/v3/files/###fileId###/permissions/anyoneWithLink'
      
      • 如果文件是公开共享的,而不是与其他特定用户共享的,则在运行此请求时,"shared": true 将更改为 "shared": false

      注意:

      • 如果要移除特定用户的权限,可以如下实现。

        1. 使用 Permissions: list 检索权限 ID。

           curl \
             -H 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
             'https://www.googleapis.com/drive/v3/files/###fileId###/permissions'
          
        2. 使用检索到的权限ID,您可以删除权限,如下所示。

           curl --request DELETE \
             -H 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
             'https://www.googleapis.com/drive/v3/files/###fileId###/permissions/###permissionId###'
          

      参考资料:

      补充:

      根据您的以下回复,

      我实际上使用 nodejs 作为驱动 API,我尝试了 http 解决方案,但是我知道如何传递我的 clientId 和 secretId(错误 500),你可以在我的问题上找到我的代码,我编辑了它

      当你想用 googleapis for Node.js 实现删除权限时,可以使用以下脚本。在这种情况下,请包括https://www.googleapis.com/auth/drive的范围。

      示例脚本:

      const fileId = "###"; // Please set your file ID.
      
      const drive = google.drive({ version: "v3", auth }); // Please use your client here.
      drive.permissions.delete(
        {
          fileId: fileId,
          permissionId: "anyoneWithLink",
        },
        (err, res) => {
          if (err) {
            console.error(err);
            return;
          }
          console.log(res.data); // In this case, no values are returned.
        }
      );
      
      • 在此示例脚本中,公开共享文件的权限被删除。

      【讨论】:

      • 您好,感谢您的回答,我实际上使用 nodejs 作为驱动 API,我尝试了 http 解决方案,但是我知道如何传递我的 clientId 和 secretId(错误 500),您可以找到我的代码我的问题,我编辑了它
      • @Nathan 感谢您的回复。我没有注意到从您最初的问题中,您想使用 googleapis for Node.js 来实现您的目标。这是因为我的英语水平不好。我对此深表歉意。对于您更新的问题,我为 Node.js 添加了一个 googleapis 示例脚本。你能确认一下吗?如果在您的情况下我仍然无法注意到我的情况,我再次道歉。
      • 不用道歉,你的帮助很有帮助!我用您分享的“权限:删除”解决了我的问题。这是我的第一篇文章,下次我会更具体
      • @Nathan 感谢您的回复。我很高兴你的问题得到了解决。而且,我深表歉意,我的 cmets 和建议的答案对您的情况没有用处。这是因为我的技术不好。我对此深表歉意。如果您能原谅我的拙劣技能,我将不胜感激。
      【解决方案3】:

      我得到了它使用以下代码:

      const result = await drive.permissions.delete({
            fileId:"YOUR FILE ID",
            permissionId:"anyoneWithLink"
          })
      

      这是完整的更新代码:

      const { google } = require('googleapis')
      const CLIENT_ID = process.env.CLIENT_ID
      const CLIENT_SECRET = process.env.CLIENT_SECRET
      const REDIRECT_URI = 'https://developers.google.com/oauthplayground'
      
      const REFRESH_TOKEN = process.env.REFRESH_TOKEN
      
      exports.handler = async () => {
        const oauth2Client = new google.auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI)
        oauth2Client.setCredentials({ refresh_token: REFRESH_TOKEN })
      
        const drive = google.drive({
          version: 'v3',
          auth: oauth2Client,
        })
      
        try {
          const result = await drive.permissions.delete({
            fileId:"YOUR FILE ID",
            permissionId:"anyoneWithLink"
          })
      
          return {
            statusCode: 200,
            headers: {
              'Access-Control-Allow-Origin': '*',
      
            },
            body: JSON.stringify({ ...result, Body: result.toString('utf-8') })
          }
        } catch (e) {
          console.log(e.message)
          return { statusCode: 500, body: e.message }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-03
        相关资源
        最近更新 更多