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

Przekazywać pliki z Amazon S3 przez serwer NodeJS bez ujawniania adresu URL S3?

Połączenie ekspresowego oprogramowania pośredniczącego (w celu sprawdzenia autoryzacji użytkownika składającego żądanie) i użycia Pakiet SDK węzła AWS powinien załatwić sprawę.

Oto pełny przykład przy użyciu multer do przesłania.

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

Oczywiście jest to tylko częściowo przetestowane i nie ma odpowiedniej obsługi błędów - ale miejmy nadzieję, że powinno dać ci przybliżone pojęcie, jak to zaimplementować.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose findbyid() zwraca null

  2. MongoDb:Jak zaimportować dane zrzutu z pliku .gz?

  3. Agregacja MongoDB C# - rozwijanie -> groupBy

  4. Jak zainicjować zestaw replikacji mongodb bez wywoływania rs.initiate()?

  5. mangusta 'findById' zwraca wartość null z prawidłowym identyfikatorem