Я использую 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);
}
});
});
}
Я также обнаружил эту проблему 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 файл?