sql >> Database >  >> NoSQL >> MongoDB

MEAN Stack Bestandsuploads

Ik heb laatst zoiets gedaan. Ik gebruikte angular-file-upload . U wilt ook node-multiparty zodat uw eindpunt de formuliergegevens kan ontleden. Dan zou je s3 kunnen gebruiken voor het uploaden van het bestand naar s3.

Hier is een deel van mijn [bewerkte] code.

Hoekige sjabloon

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

Hoekcontroller

$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);
  });
};

Route

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);
      });
    });
  });
}

Ik heb dit van mijn code veranderd, dus het werkt misschien niet direct uit de doos, maar hopelijk is het nuttig!



  1. yum install mongodb 3.2 mislukt

  2. Als de waarde van een eigenschap null is bij het bijwerken, moet die eigenschap niet aan het record worden toegevoegd

  3. MongoDB 2.1 Aggregate Framework Som van array-elementen die overeenkomen met een naam

  4. Redis::CommandError:ERR Client heeft AUTH verzonden, maar er is geen wachtwoord ingesteld