sql >> Database >  >> NoSQL >> MongoDB

Bestanden van Amazon S3 doorgeven via NodeJS-server zonder de S3-URL bloot te leggen?

Een combinatie van een express middleware (om de autorisatie van de gebruiker die het verzoek doet te controleren) en het gebruik van de Node AWS SDK zou het lukken.

Hier is een volledig voorbeeld met multer voor de upload.

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

Uiteraard is dit slechts gedeeltelijk getest en ontbreekt het aan een goede foutafhandeling - maar hopelijk geeft het u een globaal idee van hoe u het moet implementeren.



  1. Waarom is er een toegangsfout bij het verbinden met MongoDB vanuit C++?

  2. Kan Inner Arraylist-object niet bijwerken met Mongodb Java Driver

  3. Stappen om MongoDB en Solr te verbinden met behulp van DataImportHandler

  4. MongoDB C#-stuurprogramma time-out