【问题标题】:如何将图像上传到 aws s3 并使用 node express 将 url 存储在 mongoDB 中
【发布时间】:2020-10-31 03:53:20
【问题描述】:

如何将多张图片上传到 aws s3 并使用 node express 和 mongoose 将公共 url 存储在 mongoDB 中

架构

const shopSchema = new Schema({
  shopName: {
    type: String,
    required: true
  },
  ownerName:{
    type: String,
    required:true
  },
  phoneNumber:{
    type:String,
    required:true
  },
  image: {
    type: String,
    required: true
  },
  passbook: {
    type: String,
    required: true
  },
  certificate: {
    type: String,
    required: true
  },
  location: {
    type: { type: String },
    coordinates: [],
    
   },
  password:{
    type:String,
    required:true
  },
  isVerified:{
    type:Boolean,
    default:false,
    required:true
  }
  ,
  foodId: [{
    type: Schema.Types.ObjectId,
    ref: 'Food',
  }]
});

我已经使用了 multer 并存储在本地设备中,但我在部署时遇到了问题

需要将网址存储在图片、证书、存折字段中

【问题讨论】:

  • 你可以找到很多图片文件上传到S3的教程。
  • 能否请您发送任何链接。我已经探索过,但我的表单包含 3 个文件,我需要将其上传到 aws s3 并检索 url
  • 你解决过这个问题吗?您有问题的相关链接吗?

标签: node.js amazon-web-services express amazon-s3 mongoose


【解决方案1】:

我仍然不清楚这个问题,我猜没有人有兴趣保存到 MongoDb 的链接

这里我用作解决方法希望这个问题

const God = require("../models/God");
const { verifyToken } = require("../middleware/verify");
const router = require("./users");

const AWS = require("aws-sdk");
const multer = require("multer");
const uuid = require("uuid/v4");
const path = require("path");

// Upload Audio & image to S3 bucket

const s3 = new AWS.S3({
  accessKeyId: process.env.AWS_ACCESS_KEY,
  secretAccessKey: process.env.AWS_SECRET_KEY,
});

const storage = multer.memoryStorage({
  destination: function (req, file, callback) {
    callback(null, "");
  },
});

const uploadMulter = multer({ storage }).array("files");

const uploadAudio = async (filename, file) => {
  return new Promise(async (resolve, reject) => {
    const params = {
      Key: filename,
      Bucket: process.env.AWS_BUCKET_NAME,
      Body: file,
      ACL: "public-read",
    };

    await s3.upload(params, (err, data) => {
      if (err) {
        console.log("ERROR", err);
        reject(err);
      } else {
        console.log("RUNNING COCOOLLl");
        resolve(data.Location);
      }
    });
  });
};

// Creating Gods
router.post("/create/god", uploadMulter, async (req, res) => {
  console.log("UPLOAD MEDIA FOR GOD");
  console.log(req.files);

  const { name } = req.body;
  const newGod = new God({ name });

  // res.send("DONE")

  console.log("AUDIO/Image UPLOAD");
  let folder;

  try {
    req.files.forEach(async (file) => {
      if (file.mimetype.includes("audio")) folder = "bhajans";
      else folder = "images";

      let filename = `god/${folder}/${uuid() + file.originalname}`;
      let mediaLink = `https://${process.env.AWS_BUCKET_NAME}.s3.amazonaws.com/${filename}`;
      newGod.bhajans.push(mediaLink);

      try {
        const link = await uploadAudio(filename, file.buffer);
        // console.log(link);
        // newGod.bhajans.push(link);
      } catch (error) {
        console.log("Error in uploadig media", error);
      }
    });

    try {
      const saveGod = await newGod.save();
      console.log("SAVED GOD ::::::::::::", saveGod);
      res.status(200).json("God added");
    } catch (err) {
      console.log("Error in saving data to DB!!!!!!");
      res.status(500).json(err);
    }
  } catch (error) {
    console.log(error);
    res.send("ERROR :) :)");
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 2019-11-21
    • 2021-12-29
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多