使用 google 驱动器 API 更新 file/folder 的 "shared" 状态
Update "shared" state of a file/folder with google drive API
我无法解决如何使用 google 驱动器 API.
将 "shared"
状态更改为 false
这是我的做法:
我获取所有文件夹和文件 public [this
一个][1]
(我使用 q:"'me' in owners and visibility != 'limited'"
过滤器)
我拿了file/folder个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 }
}
}
更改可见性(“共享”:true -> “共享”: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
如果我没理解错的话,您看不到可以将文件更改为“共享”的地方:是的。如果是这样,在您从官方文档提供的同一个 link 中,您可以在“请求正文”中找到它。
从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
。
注:
如果要取消特定用户的权限,可以按如下方式实现。
使用权限列表检索权限 ID。
curl \
-H 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
'https://www.googleapis.com/drive/v3/files/###fileId###/permissions'
使用检索到的权限 ID,您可以按如下方式删除权限。
curl --request DELETE \
-H 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
'https://www.googleapis.com/drive/v3/files/###fileId###/permissions/###permissionId###'
参考文献:
已添加:
根据您的以下回复,
I actualy use nodejs for drive API, I tried the http solution, but idk how can i pass my clientId and secretId (error 500), You can find my code on my question, i edited it
当你想实现对Node.js的googleapis删除权限时,可以使用如下脚本。在这种情况下,请包括 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.
}
);
- 在此示例脚本中,删除了公开共享文件的权限。
我使用以下代码得到了它:
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 }
}
}
我无法解决如何使用 google 驱动器 API.
将"shared"
状态更改为 false
这是我的做法:
我获取所有文件夹和文件 public [this 一个][1] (我使用
q:"'me' in owners and visibility != 'limited'"
过滤器)我拿了file/folder个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 }
}
}
更改可见性(“共享”:true -> “共享”: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
如果我没理解错的话,您看不到可以将文件更改为“共享”的地方:是的。如果是这样,在您从官方文档提供的同一个 link 中,您可以在“请求正文”中找到它。
从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
。
注:
如果要取消特定用户的权限,可以按如下方式实现。
使用权限列表检索权限 ID。
curl \ -H 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ 'https://www.googleapis.com/drive/v3/files/###fileId###/permissions'
使用检索到的权限 ID,您可以按如下方式删除权限。
curl --request DELETE \ -H 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ 'https://www.googleapis.com/drive/v3/files/###fileId###/permissions/###permissionId###'
参考文献:
已添加:
根据您的以下回复,
I actualy use nodejs for drive API, I tried the http solution, but idk how can i pass my clientId and secretId (error 500), You can find my code on my question, i edited it
当你想实现对Node.js的googleapis删除权限时,可以使用如下脚本。在这种情况下,请包括 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.
}
);
- 在此示例脚本中,删除了公开共享文件的权限。
我使用以下代码得到了它:
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 }
}
}