我正在使用 nodejs 制作一個應用程式,我需要從 Google 驅動器上的檔案夾中下載檔案。這是我用于下載給定檔案夾鏈接中的檔案的代碼。folderId 是從谷歌驅動器獲得的共享鏈接的 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 來獲取檔案夾的名稱?
uj5u.com熱心網友回復:
在您的腳本中,如何進行以下修改?
修改后的腳本:
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,會發生錯誤。請注意這一點。
參考:
- 檔案:獲取
uj5u.com熱心網友回復:
我注意到您正在使用:
檔案串列
有了那個,除非您在查詢中使用它,否則您只能使用它來獲取父母資訊,因此您只能找到檔案夾并包含檔案夾的名稱:
mimeType='application/vnd.google-apps.folder'
您可以測驗它并從上面的檔案和欄位中添加“*”。
回應中的每個檔案資源都有一個屬性,該屬性parents是檔案所在檔案夾的 ID。您可以將此檔案夾 ID 與files.get請求一起使用以檢查它是否是您要查找的檔案夾,您可以在此處進行測驗。您可以在“欄位”引數中放置“名稱”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/444097.html
