当一个表单中有多个输入时,使用亚马逊s3上传图片。

问题描述 投票:0回答:1

我已经安装了multer,multer-s3和aws-sdk,并尝试上传个人资料图片,当用户上传个人资料图片。

到目前为止,我有下面的代码在一个文件中调用file_upload.js。

const aws = require('aws-sdk')

const multer = require('multer')
const multerS3 = require('multer-s3')

aws.config.update({
    secretAccessKey: "my access key",
    accessKeyId: "my key id",
    region: "us-east-2"
})
const s3 = new aws.S3()

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'user-image1',
    acl: 'public-read',
    metadata: function (req, file, cb) {
      cb(null, {fieldName: 'TESTING-META-DATA'});
    },
    key: function (req, file, cb) {
      cb(null, Date.now().toString())
    }
  })
})

module.exports = upload

和一个帖子请求,当用户选择一些输入

const upload = require('../assets/file-upload')
const singleUpload = upload.single('image')

router.post("/edit/:id", (req, res) => {
  User.findByIdAndUpdate(
    { _id: id },
    {
      $set: { 
        education: req.body.education,
        language: req.body.language,
        bio: req.body.bio,
        image_file: req.body.image_file
      },
    },
    { new: true },
    (err, result) => {
      res.redirect("/dashboard");
    }
  );
});

在我的ejs中,除了图片,所有的字符串输入都能正确处理。

<div class="upload-btn-img">
        <input type="file" name="image_file" onchange="showThumbnail(this)" />
 </div>

我的问题是,如何保存照片和其他所有的输入数据?所有其他的输入数据都存储在mongodb atlas中,而图片需要存储在amazon s3中。

node.js express amazon-s3 multer
1个回答
0
投票

你需要一个中间件,拦截请求并将文件发送到s3,然后返回url。

这里是一个例子,我做了一段时间,这是 --控制器 https:/github.comC0D1NGD0J0weareunited4lifeblobmasterappControllersupload.js。)

--Routerouter.post("", passport.authenticate('jwt', {session: false}), uploadImg, postCntrl.create)。

注意 "uploadImg "中间件,它必须在保存文档的控制器动作之前。

© www.soinside.com 2019 - 2024. All rights reserved.