2016-03-09 4 views
0

Я новичок в Angular, у меня есть сценарий, где мне нужно одновременно загружать несколько файлов. Мои файлы хранятся в GridFS. Я могу загружать файлы, но, например, в формате pdf пусто. Содержимое contentType, хранящееся в gridFS, является «contentType»: «binary/octet-stream», я пропускаю что-нибудь?Загрузка нескольких файлов с помощью AngularJS и сохранение в пути

Мой Джейд код

tr(ng-repeat='row in displayedCollection') 
         td {{ row.Name}} 
         td {{ row.email}} 
         td 
          button.btn.btn-info(type='button',ng-click="downloadDocuments(row.documentsSubmitted)" download) Download Documents 

Мой код контроллера

$scope.downloadDocuments = function (row) { 
    angular.forEach(row, function (value, key) { 
     var fileToDownload = value.id + "," + 'TrainingPartnerAddingTrainingCenter'; 

     $http.get('/downloadDocuments/' + fileToDownload).success(function (result, status, headers, config) { 
      var _contentType = (headers('Content-Type')); 
      var _fileName = headers('FileName'); 
      var blob = new Blob([ result ], { type : _contentType }); 
      var url = (window.URL || window.webkitURL).createObjectURL(blob); 
      var anchor = angular.element('<a/>'); 
      anchor.attr({ 
       href : url, 
       target : '_blank', 
       download : _fileName 
      })[0].click(); 
     }); 
    }); 
}; 

мой node.js код выглядит следующим образом

exports.downloadDocument = function (req, res) { 
var paramData = req.params.fileToDownload.split(','); 
var role = req.session.user.role; 
var conn = mongoose.connection; 
var gfs = Grid(conn.db, mongoose.mongo); 
routesLogger.logInfo(role, "downloadDocument", "START"); 
gfs.findOne({_id: paramData[0], root: paramData[1]}, function (err, file) { 
    if (err) { 
     routesLogger.logError(role, "downloadDocument", err); 
     return res.status(400).send(err); 
    } 
    else if (!file) { 
     routesLogger.logError(role, "downloadDocument", "No File Found for download"); 
     return res.status(404).send('Error on the database looking for the file.'); 
    } 
    else { 
     res.set('Content-Type', file.contentType); 
     res.set('Content-Disposition', 'attachment; filename="' + file.filename + '"'); 

     var readstream = gfs.createReadStream({ 
      _id: paramData[0], 
      root: paramData[1] 
     }); 

     readstream.on("error", function (err) { 
      routesLogger.logError(role, "downloadDocument", err); 
      res.end(); 
     }); 
     readstream.pipe(res); 
     routesLogger.logInfo(role, "downloadDocument", "END"); 
    } 
}); 

};

+0

в CONTENTTYPE, хранящейся в gridFS является «применение/PDF. Ф все еще приходят пустыми –

ответ

0

Так что ошибка, которую я делал, не добавляла параметр {responseType: 'arraybuffer'}. Я нашел ответ в этой ссылке

AngularJS: Display blob (.pdf) in an angular app

$http.get('/downloadDocuments/' + fileToDownload,{ responseType: 'arraybuffer' }).success(function (result, status, headers, config) { 
      console.log(headers('Content-Type')); 
      var _contentType = (headers('Content-Type')); 
      var _fileName = headers('FileName'); 
      var blob = new Blob([result], {type: _contentType }); 
      saveAs(blob, _fileName); 

 Смежные вопросы

  • Нет связанных вопросов^_^