Javascript 如何从google drive下载动态文件
没问题,我刚刚开始使用Google Drive API v3。当我只有fileId时,如何从google drive下载动态文件。文件可以是文件、图像、pdf或文档 我试着搜索,但找不到任何与此相关的参考或示例 这是我到目前为止所拥有的,但它只下载特定的文件扩展名Javascript 如何从google drive下载动态文件,javascript,node.js,express,google-drive-api,Javascript,Node.js,Express,Google Drive Api,没问题,我刚刚开始使用Google Drive API v3。当我只有fileId时,如何从google drive下载动态文件。文件可以是文件、图像、pdf或文档 我试着搜索,但找不到任何与此相关的参考或示例 这是我到目前为止所拥有的,但它只下载特定的文件扩展名 downloadFile(req, res) { const auth = new google.auth.JWT( client_email, null, private_key,
downloadFile(req, res) {
const auth = new google.auth.JWT(
client_email,
null,
private_key,
SCOPES,
);
const { fileId } = req.params;
const drive = google.drive({ version: 'v3', auth});
var dest = fs.createWriteStream('./tmp/downloads/dummy.pdf')
drive.files.get({
fileId,
alt: 'media',
}, {
responseType: 'stream'
}).then((driveResponse) => {
driveResponse.data.on('end', () => {
console.log(`downloading fileID ${fileId}`);
})
.on('error', (err) => {
console.log(err);
})
.on('data', (d) => {
console.log(d);
})
.pipe(dest)
})
.catch((err) => {
console.log(err);
})
}
有没有办法从google drive下载动态文件?我相信您的目标如下
- 您想使用服务帐户和文件ID从Google Drive下载文件
- 这些文件包括谷歌文档文件和除谷歌文档文件以外的其他文件
- 您希望使用googleapis for Node.js实现这一点
- 不幸的是,从
,我无法了解您的详细情况。但我想你的问题可能是因为下载了谷歌文档文件和除谷歌文档文件以外的其他文件只能下载特定的文件扩展名。
- 下载Google Docs文件时,需要使用驱动API中的“文件:导出”方法下载文件
- 在下载Google Docs文件以外的文件时,需要使用驱动API中的“files:get”方法下载文件
- 我认为上述情况可能是你问题的原因
- 为了下载googledocs文件和googledocs文件以外的文件,我提出以下流程。
- 检查文件ID的mimeType
- 通过mimeType使用每个方法下载文件
- 在这次修改中,我在
准备了3种类型的Google文档文件。当您想下载其他mimeTypes时,请修改convertMimeTypes
。例如,在本例中,Google文档文件作为Microsoft文档文件下载convertMimeTypes
var dest = fs.createWriteStream('./tmp/downloads/dummy.pdf')
drive.files.get({
fileId,
alt: 'media',
}, {
responseType: 'stream'
}).then((driveResponse) => {
driveResponse.data.on('end', () => {
console.log(`downloading fileID ${fileId}`);
})
.on('error', (err) => {
console.log(err);
})
.on('data', (d) => {
console.log(d);
})
.pipe(dest)
})
.catch((err) => {
console.log(err);
})
drive.files.get({ fileId, fields: "*" }, async (err, { data }) => {
if (err) {
console.log(err);
return;
}
let filename = data.name;
const mimeType = data.mimeType;
let res;
if (mimeType.includes("application/vnd.google-apps")) {
const convertMimeTypes = {
"application/vnd.google-apps.document": {
type:
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
ext: ".docx",
},
"application/vnd.google-apps.spreadsheet": {
type:
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
ext: ".xlsx",
},
"application/vnd.google-apps.presentation": {
type:
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
ext: ".pptx",
},
};
filename += convertMimeTypes[mimeType].ext;
res = await drive.files.export(
{
fileId,
mimeType: convertMimeTypes[mimeType].type,
},
{ responseType: "stream" }
);
} else {
res = await drive.files.get(
{
fileId,
alt: "media",
},
{ responseType: "stream" }
);
}
const dest = fs.createWriteStream(filename);
res.data
.on("end", () => console.log("Done."))
.on("error", (err) => {
console.log(err);
return process.exit();
})
.pipe(dest);
});