我正在使用http触发的firebase云功能来从驱动器api获取文件并将响应作为附件发送回客户端。我这样做是因为到目前为止,只有服务帐户才能访问这些文件。当我使用xlsx或pdf扩展名下载文件时,文件分别损坏或空白,但是当我使用csv扩展名时,接收到的文件没有错误并且可以正确打开。
function downloadFileFromDrive(res,req){
const body=req.body;
const fileId=body.fileId;
const extension=body.extension;
const title=body.title;
var extensionToMimeType={
"xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"csv":"text/csv",
"pdf":"application/pdf"
};
var jwt=getJwt();
var apiKey=getApiKey();
return new Promise((resolve,reject)=>{
drive.files.export({
fileId:fileId,
mimeType:extensionToMimeType[extension],
auth: jwt,
key: apiKey,
},(error,response)=>{
if(error){
console.log('Error during download ' +error.message);
reject('Error during download' + error.message);
res.send('Error during download' + error.message);
}
else{
resolve(response.data);
response.headers['content-disposition']='attachment; filename=\"'+title.replace(/ /g, '_')+'_results.'+extension+'\"'
res.set(response.headers);
res.send(response.data);
}
});
});
}
我还检查了this的github问题,并尝试在export
这样的函数中使用额外的参数
var config={encoding:'utf-8'};
if(extension=='xlsx'||extension=='pdf'){
config.encoding=null;
console.log('xls or pdf');
}
drive.files.export({
fileId:fileId,
mimeType:extensionToMimeType[extension],
auth: jwt,
key: apiKey,
},config,(error,response)=>{
//handle callback
});
但是xlsx文件仍然损坏,而pdf文件为空。如何正确获取pdf和xlsx文件?