Google 驱动器 API - 从 id 获取文件夹名称
Google drive API - Getting name of folder from id
我正在使用 nodejs 制作一个应用程序,我需要从 Google 驱动器上的文件夹下载文件。这是我用于下载给定文件夹 link 中的文件的代码。 folderId 是从 google 驱动器获得的共享 link 的 ID。
function DlImgFromFolder(auth, folderId, folderName) {
const drive = google.drive({version: 'v3', auth});
var query = "'" + folderId + "' in parents and mimeType contains 'image/' and trashed = false";
drive.files.list({
q: query,
fields: 'files(id, name)',
}, function(error, response) {
if (error) { return console.log("ERROR", error); }
response.data.files.forEach(function(item) {
var file = fs.createWriteStream("./" +folderName+ '/'+ item.name);
file.on("finish", function() {
console.log("downloaded", item.name);
});
// Download file
const drive = google.drive({version: 'v3', auth});
drive.files.get({
fileId: item.id,
alt: 'media'
}, {
responseType: 'stream'
},function(err, response){
if(err)return '';
response.data.on('error', err => {
}).on('end', ()=>{
})
.pipe(file);
});
});
});
}
到目前为止,我是手动指定文件夹名称,但我想根据文件夹的原始名称自动命名。我已阅读 api 文档并在 google 上进行了搜索,但找不到任何相关信息。有没有办法根据提供下载的url/id得到文件夹的名字?
我注意到您正在使用:
files.list
你只能用它来获取 parents 信息,除非你在查询中使用它,所以你只能找到文件夹,并且会包含 folder 的名称:
mimeType='application/vnd.google-apps.folder'
您可以测试它并查看上面的文档,对于字段只需添加“*”。
响应中的每个文件资源都有一个 属性 parents
,它是文件所在文件夹的 ID。您可以将此文件夹 ID 与 files.get
请求一起使用,以检查它是否是您要查找的文件夹,您可以对其进行测试 here。您可以将“名称”放在“字段”参数中。
在你的脚本中,做如下修改怎么样?
修改后的脚本:
async function DlImgFromFolder(auth, folderId) {
const drive = google.drive({ version: "v3", auth });
const res = await drive.files
.get({ fileId: folderId })
.catch((err) => console.log(err.errors));
if (!res) return;
const folderName = res.data.name;
var query =
"'" +
folderId +
"' in parents and mimeType contains 'image/' and trashed = false";
drive.files.list(
{
q: query,
fields: "files(id, name)",
},
function (error, response) {
if (error) {
return console.log("ERROR", error);
}
response.data.files.forEach(function (item) {
var file = fs.createWriteStream("./" + folderName + "/" + item.name);
file.on("finish", function () {
console.log("downloaded", item.name);
});
// Download file
drive.files.get(
{
fileId: item.id,
alt: "media",
},
{
responseType: "stream",
},
function (err, response) {
if (err) return "";
response.data
.on("error", (err) => {})
.on("end", () => {})
.pipe(file);
}
);
});
}
);
}
- 在此修改中,使用“Files:get”方法从输入的文件夹 ID 中检索文件夹名称。
注:
- 在这种情况下,当您的本地PC没有
folderName
的文件夹时,就会出现错误。请注意这一点。
参考:
我正在使用 nodejs 制作一个应用程序,我需要从 Google 驱动器上的文件夹下载文件。这是我用于下载给定文件夹 link 中的文件的代码。 folderId 是从 google 驱动器获得的共享 link 的 ID。
function DlImgFromFolder(auth, folderId, folderName) {
const drive = google.drive({version: 'v3', auth});
var query = "'" + folderId + "' in parents and mimeType contains 'image/' and trashed = false";
drive.files.list({
q: query,
fields: 'files(id, name)',
}, function(error, response) {
if (error) { return console.log("ERROR", error); }
response.data.files.forEach(function(item) {
var file = fs.createWriteStream("./" +folderName+ '/'+ item.name);
file.on("finish", function() {
console.log("downloaded", item.name);
});
// Download file
const drive = google.drive({version: 'v3', auth});
drive.files.get({
fileId: item.id,
alt: 'media'
}, {
responseType: 'stream'
},function(err, response){
if(err)return '';
response.data.on('error', err => {
}).on('end', ()=>{
})
.pipe(file);
});
});
});
}
到目前为止,我是手动指定文件夹名称,但我想根据文件夹的原始名称自动命名。我已阅读 api 文档并在 google 上进行了搜索,但找不到任何相关信息。有没有办法根据提供下载的url/id得到文件夹的名字?
我注意到您正在使用:
files.list
你只能用它来获取 parents 信息,除非你在查询中使用它,所以你只能找到文件夹,并且会包含 folder 的名称:
mimeType='application/vnd.google-apps.folder'
您可以测试它并查看上面的文档,对于字段只需添加“*”。
响应中的每个文件资源都有一个 属性 parents
,它是文件所在文件夹的 ID。您可以将此文件夹 ID 与 files.get
请求一起使用,以检查它是否是您要查找的文件夹,您可以对其进行测试 here。您可以将“名称”放在“字段”参数中。
在你的脚本中,做如下修改怎么样?
修改后的脚本:
async function DlImgFromFolder(auth, folderId) {
const drive = google.drive({ version: "v3", auth });
const res = await drive.files
.get({ fileId: folderId })
.catch((err) => console.log(err.errors));
if (!res) return;
const folderName = res.data.name;
var query =
"'" +
folderId +
"' in parents and mimeType contains 'image/' and trashed = false";
drive.files.list(
{
q: query,
fields: "files(id, name)",
},
function (error, response) {
if (error) {
return console.log("ERROR", error);
}
response.data.files.forEach(function (item) {
var file = fs.createWriteStream("./" + folderName + "/" + item.name);
file.on("finish", function () {
console.log("downloaded", item.name);
});
// Download file
drive.files.get(
{
fileId: item.id,
alt: "media",
},
{
responseType: "stream",
},
function (err, response) {
if (err) return "";
response.data
.on("error", (err) => {})
.on("end", () => {})
.pipe(file);
}
);
});
}
);
}
- 在此修改中,使用“Files:get”方法从输入的文件夹 ID 中检索文件夹名称。
注:
- 在这种情况下,当您的本地PC没有
folderName
的文件夹时,就会出现错误。请注意这一点。