如何在Node.js中的Google驱动器导出文件API中使用动态mimeTypes

时间:2019-03-18 09:00:45

标签: node.js google-drive-api

我正在使用Google驱动器获取文件和导出文件nodejs API,但是在此API中有很多mimeType,如果我上传了日常使用的文件,例如.docx,.xls,pdf等,那么我可以处理,但是如果文件mimeType不同,那么我该如何处理这些类型。在我的代码中创建许多条件来处理mimeTypes非常棘手。 请帮助我。以下是我的代码。

const drive = google.drive({version: 'v3', auth});
var fileId = fileId;
var ext, mimTypes;

drive.files.get({fileId: fileId},function(err, res){

if(res.data.mimeType == 'application/vnd.google-apps.document'){
   mimTypes = 'application/vnd.oasis.opendocument.text';
   ext = '.docx';
}else if(res.data.mimeType =='application/vnd.google-apps.spreadsheet'){
   mimTypes = 'text/csv';
   ext = '.xls';
}else if(res.data.mimeType == 'application/pdf'){
 if(res.data.name.indexOf(".pdf") != -1){
   res.data.name = res.data.name.split('.pdf')[0];
 }
   mimTypes = 'application/pdf';
   ext = '.pdf';
}

对于从Google驱动器导出文件:

var dest = config.lib.fs.createWriteStream('./uploads/'+res.data.name+ext);
drive.files.export({fileId: res.data.id, mimeType: mimTypes}, {responseType: 'stream'},
function(err, res){
  res.data
  .on('progress', function (state) {
      console.log('progress', state);
      io.sockets.emit("upload_progress", state);
  })
  .on('end', () => {
      console.log('Done');
      io.sockets.emit("upload_progress", {percent: 100});
  })
  .on('error', err => {
      console.log('Error', err);
  })
  .pipe(dest);
})

0 个答案:

没有答案