Загрузка файла NodeJS / ReactJS в цифровое пространство океана - PullRequest
0 голосов
/ 01 октября 2018

У многих разных ответов на SO, похоже, разные идеи о том, как это сделать ... Я пытался собрать их вместе и заставить это работать, но не повезло.

В основном, мои console.log("uploading....") и console.log("uploaded....") обнаруживаются, но на самом деле ничего не загружается.Также не отображаются ошибки.

server.js:

const aws = require("aws-sdk");
const multer = require("multer");
const multerS3 = require("multer-s3");

//aws setup
const s3 = new aws.S3();
aws.config.update({
  secretAccessKey: "MY_SECRET",
  accessKeyId: "MY_KEY",
  region: "us-east-1"
});

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: "filehub",
    key: function(req, file, cb) {
      cb(null, file.originalname);
    }
  })
}).array("upload", 1);

app.post("/files/upload_aws", (req, res, next) => {
  upload(req, res, function(err) {
    console.log("uploading....");
    if (err) {
      console.log(err);
    }
    console.log("uploaded....");
  });
});

И на внешнем интерфейсе, на случай, если это кому-нибудь поможет, хотя эта часть, кажется, работает просто отлично:

  handleAWSFile = e => {
    e.preventDefault();

    console.log("clicked");

    axios
      .post("files/upload_aws")
      .then(res => {
        this.props.handleSnackBar("File added to AWS");
      })
      .catch(res => {
        this.props.handleSnackBar("File NOT added to AWS!!");
      });
  };

1 Ответ

0 голосов
/ 09 декабря 2018

Я думаю, что здесь происходит несколько разных вещей.

Мой регион по-разному обозначен для Digital Ocean.Вместо непосредственного помещения региона в обновление aws.config у меня есть:

aws.config.update({
accessKeyId: process.env.SPACES_ACCESS_KEY_ID,
secretAccessKey: process.env.SPACES_SECRET_ACCESS_KEY
});

// Set S3 endpoint to DigitalOcean Spaces
const spacesEndpoint = new aws.Endpoint('nyc3.digitaloceanspaces.com');
const s3 = new aws.S3({
endpoint: spacesEndpoint
});

Кроме того, я включаю строку для acl в свою функцию хранения данных:

// Change bucket property to your Space name
const upload = multer({

    storage: multerS3({
        s3: s3,
        bucket: 'your-space-name',
        acl: 'public-read',
        key: function (request, file, cb) {
            console.log(file);
            cb(null, file.originalname);
        }
    })
}).array('file', 1);

ЭтоТакже очень важно следить за тем, какое имя вы добавили в этот бит массива в конце.В моем случае у меня есть «файл».Я буду использовать это в своем запросе POST.

Вот мой пример загрузки почтальона: Пример загрузки почтальона

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...