MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Прехвърляне на файлове от Amazon S3 през NodeJS сървър без излагане на S3 URL?

Комбинация от експресен междинен софтуер (за проверка на оторизацията на потребителя, който прави заявката) и използването на Node AWS SDK трябва да свърши работа.

Ето пълен пример за използване на 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Условна проекция в mongodb с помощта на c# драйвер

  2. 10 въпроса, които да зададете (и да отговорите), когато хоствате MongoDB на AWS

  3. модел mongoose за различни типове потребители

  4. заявка за агрегиране на mongo с mgo драйвер

  5. Коя е най-добрата практика за MongoDB връзки на Node.js?