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

S3 URLを公開せずに、Amazon S3からNodeJSサーバーを介してファイルを渡しますか?

    エクスプレスミドルウェア(リクエストを行うユーザーの承認を確認するため)とノードAWSSDK トリックを行う必要があります。

    これは、multer を使用した完全な例です。 アップロード用。

    var express = require('express');
    var app = express();
    var router = express.Router();
    var multer = require('multer');
    var upload = multer({
      dest: "tmp/"
    });
    var fs = require('fs');
    var async = require('async');
    var AWS = require('aws-sdk');
    // Configure AWS SDK here
    var s3 = new AWS.s3({
      params: {
        Bucket: 'xxx'
      }
    });
    
    /**
     * Authentication middleware
     *
     * It will be called for any routes starting with /files
     */
    app.use("/files", function (req, res, next) {
      var authorized = true; // use custom logic here
      if (!authorized) {
        return res.status(403).end("not authorized");
      }
      next();
    });
    
    // Route for the upload
    app.post("/files/upload", upload.single("form-field-name"), function (req, res) {
      var fileInfo = console.log(req.file);
      var fileStream = fs.readFileSync(fileInfo.path);
      var options = {
        Bucket: 'xxx',
        Key: 'yyy/'+fileName,
        Body: fileStream
      };
    
      s3.upload(options, function (err) {
        // Remove the temporary file
        fs.removeFileSync("tmp/"+fileInfo.path); // ideally use the async version
        if (err) {
          return res.status(500).end("Upload to s3 failed");
        }
        res.status(200).end("File uploaded");
      });
    });
    
    // Route for the download
    app.get("/files/download/:name", function (req, res) {
      var fileName = req.params.name;
      if (!fileName) {
        return res.status(400).end("missing file name");
      }
      var options = {
        Bucket: 'xxx',
        Key: 'yyy/'+fileName
      };
      res.attachment(fileName);
      s3.getObject(options).createReadStream().pipe(res);
    });
    
    app.listen(3000);
    

    明らかに、これは部分的にしかテストされておらず、適切なエラー処理が不足していますが、実装方法の大まかなアイデアが得られることを願っています。



    1. MongoDB find()結果セットから最後のドキュメントを特定します

    2. MongoDBテキスト検索と順序付け

    3. MongoDBでの年および月ごとの集計

    4. MongoDBエラー:mongodb-10gen E:サブプロセス/ usr / bin / dpkgがエラーコードを返しました(1)