sql >> データベース >  >> NoSQL >> MongoDB

MEANスタックファイルのアップロード

    私は最近このようなことをしました。 angle-file-upload を使用しました 。 node-multiparty も必要になります エンドポイントがフォームデータを解析するため。次に、s3 を使用できます。 ファイルをs3にアップロードするため。

    これが私の[編集済み]コードの一部です。

    角度テンプレート

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

    角度コントローラー

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

    ルート

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

    これをコードから変更したので、そのままでは機能しない可能性がありますが、お役に立てば幸いです。



    1. FlaskはMongdbのクエリに時間がかかります

    2. mongodbの文字列日付形式でクエリ

    3. 非同期関数node.jsからの戻り値

    4. MongoDBでの遅いクエリの処理