MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Przesyłanie plików MEAN Stack

Ostatnio zrobiłem coś takiego. Użyłem angular-file-upload . Będziesz także potrzebować node-multiparty dla punktu końcowego do przeanalizowania danych formularza. Następnie możesz użyć s3 za przesłanie pliku do s3.

Oto część mojego [edytowanego] kodu.

Szablon kątowy

<button>
  Upload <input type="file" ng-file-select="onFileSelect($files)">
</button>

Kontroler kątowy

$scope.onFileSelect = function(image) {
  $scope.uploadInProgress = true;
  $scope.uploadProgress = 0;

  if (angular.isArray(image)) {
    image = image[0];
  }

  $scope.upload = $upload.upload({
    url: '/api/v1/upload/image',
    method: 'POST',
    data: {
      type: 'profile'
    },
    file: image
  }).progress(function(event) {
    $scope.uploadProgress = Math.floor(event.loaded / event.total);
    $scope.$apply();
  }).success(function(data, status, headers, config) {
    AlertService.success('Photo uploaded!');
  }).error(function(err) {
    $scope.uploadInProgress = false;
    AlertService.error('Error uploading file: ' + err.message || err);
  });
};

Trasa

var uuid = require('uuid'); // https://github.com/defunctzombie/node-uuid
var multiparty = require('multiparty'); // https://github.com/andrewrk/node-multiparty
var s3 = require('s3'); // https://github.com/andrewrk/node-s3-client

var s3Client = s3.createClient({
  key: '<your_key>',
  secret: '<your_secret>',
  bucket: '<your_bucket>'
});

module.exports = function(app) {
  app.post('/api/v1/upload/image', function(req, res) {
    var form = new multiparty.Form();
    form.parse(req, function(err, fields, files) {
      var file = files.file[0];
      var contentType = file.headers['content-type'];
      var extension = file.path.substring(file.path.lastIndexOf('.'));
      var destPath = '/' + user.id + '/profile' + '/' + uuid.v4() + extension;

      var headers = {
        'x-amz-acl': 'public-read',
        'Content-Length': file.size,
        'Content-Type': contentType
      };
      var uploader = s3Client.upload(file.path, destPath, headers);

      uploader.on('error', function(err) {
        //TODO handle this
      });

      uploader.on('end', function(url) {
        //TODO do something with the url
        console.log('file opened:', url);
      });
    });
  });
}

Zmieniłem to z mojego kodu, więc może nie działać po wyjęciu z pudełka, ale mam nadzieję, że jest to pomocne!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wskazówki dotyczące zdalnego zarządzania MongoDB

  2. Jakich plików lub katalogów oczekuje mongorestore przy użyciu flagi -d?

  3. Jak porównywać skrypty mongodb/mongoid w celu porównania dwóch różnych technik zapytań

  4. Agregacja roczna i miesięczna w MongoDB

  5. Zapytania wewnątrz tablic Postgres JSON