使用Multer MulterS3和AWS SDK,NodeJS将文件上传到Digitalocean Spaces

时间:2018-03-24 23:20:45

标签: node.js aws-sdk multer multer-s3

我正在尝试使用快速API将文件上传到我的Digitalocean Space。永远不会调用以下上载方法中的日志,并始终返回成功状态。在路由req.files中,文件通过,但没有上传文件。我发现任何显示不同方法的信息都能提供更好的结果。

我的上传路线:

const express = require('express');
const AWS = require('aws-sdk');
const multer = require('multer');
const multerS3 = require('multer-s3');

const api = express.Router();

AWS.config.update({
  accessKeyId: process.env.SPACES_ACCESS_KEY_ID,
  secretAccessKey: process.env.SPACES_ACCESS_KEY,
});

const spacesEndpoint = new AWS.Endpoint('nyc3.digitaloceanspaces.com/uploads');
const s3 = new AWS.S3({
  endpoint: spacesEndpoint,
});

const upload = multer({
  storage: multerS3({
    s3,
    bucket: '<my bucket>',
    acl: 'public-read',
    // eslint-disable-next-line
    key: function (req, file, cb) {
      console.log(file);
      cb(null, file.originalname);
    },
  }),
}).single('upload');

api.post('/', (req, res, next) => {
  console.log(req.files);
  upload(req, res, err => {
    if (err) {
      console.log(err);
      return res.status(400).json({ errors: err });
    }

    return res.status(200).json({ message: 'File uploaded successfully.' });
  });
});

module.exports = api;

我的上传功能来自前端使用superagent:

request
      .post('http://localhost:5000/api/uploads')
      .attach('upload', <image file>)
      .then(() => {
        console.log('done');
      });

1 个答案:

答案 0 :(得分:1)

我想通了......我把express-fileupload实现为一个中间件,我用multer替换。 Express-fileupload干扰了multer的进程。