首页 > 解决方案 > 邮递员正在上传到 S3,但我的节点应用程序不是

问题描述

我正在尝试设置直接进入 S3 的文件上传。当我与邮递员一起发布时它可以工作,但它在本地主机中对我不起作用。

// uploadController.js

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

aws.config.update({
  secretAccessKey: process.env.SECRETACCESSKEY,
  accessKeyId: process.env.ACCESSKEYID,
  region: "us-west-2",
});
const s3 = new aws.S3();

const fileFilter = (req, file, cb) => {
  if (file.mimetype === "image/jpeg" || file.mimetype === "image/png") {
    cb(null, true);
  } else {
    cb(new Error("Invalid mime type, only JPEG and PNG"), false);
  }
};  

const upload = multer({
  fileFilter: fileFilter,
  storage: multerS3({
    s3: s3,
    bucket: "mylocal",
    // acl: "public-read",
    metadata: function (req, file, cb) {
      cb(null, { fieldName: file.fieldname });
    },
    key: function (req, file, cb) {
      console.log(file);
      cb(null, Date.now().toString());
    },
  }),
});

module.exports = upload;

// routes.js

//let upload = require('../controllers/uploadController')


router.get("/upload", function (req, res) {
  res.render("upload");
});

const singleUpload = upload.single("image");

router.post("/upload", function (req, res) {
  singleUpload(req, res, function (err) {
    if (err) {
      return res.status(422).send({ errors: "wrong" });
    }
    // return res.json({'imageUrl': req.file.location})
    res.send('uploaded!')
  });
});

// upload.ejs


 <form method="POST">
      <input type="file" name="image"/>
      <button type="submit">upload</button>
    </form>

当我使用邮递员发帖时,每次都成功,我可以看到存储桶中的图像。我已经调查了本地主机中的网络和标题选项卡以及邮递员中的标题。

我的本地主机:


Request URL: http://localhost:3000/upload
Request Method: POST
Status Code: 200 OK
Remote Address: [::1]:3000
Referrer Policy: strict-origin-when-cross-origin
Connection: keep-alive
Content-Length: 9
Content-Type: text/html; charset=utf-8
Date: Wed, 09 Dec 2020 23:38:26 GMT
ETag: W/"9-7HXq8Taw8mvUeWWmTalr7FHWFHk"
Vary: Accept-Encoding
X-DNS-Prefetch-Control: off
X-Powered-By: Express

FORM DATA: 
image: curiousCat.jpg

和我的邮递员标题:邮差

我对发生的事情感到非常困惑,我真的很感激任何形式的帮助

标签: node.jsamazon-web-servicesexpressamazon-s3postman

解决方案


将此行添加到您的表单标签

 enctype="multipart/form-data"

你可以在这里阅读更多


推荐阅读