如何在Node.js中将S3 URL链接到MongoDB?

问题描述

我对如何将特定的电影URL链接mongoose模型没有任何想法。我正在使用multer-s3multer来使form/multi-part正文上载特定文件,但我真的不知道如何从multer获取URL并将其放入数据库

import { Router } from 'express'
import { MovieController } from 'movies/controller'
import { SPACES_BUCKET,SPACES_ENDPOINT,SPACES_PRIVATE,SPACES_PUBLIC } from 'utils/envfile'

import multer from 'multer'
import multerS3 from 'multer-s3'
import aws from 'aws-sdk'

aws.config.update({
    accessKeyId: SPACES_PUBLIC,secretAccessKey: SPACES_PRIVATE,})

const s3 = new aws.S3({
    endpoint: SPACES_ENDPOINT,})

const upload = multer({
    storage: multerS3({
        s3: s3,bucket: SPACES_BUCKET,acl: 'public-read',key: function (request,file,cb) {
            console.log(file)
            cb(null,file.originalname)
        },}),})

export class MovieRouter {
    public router: Router
    public controller: MovieController = new MovieController()

    constructor() {
        this.router = Router()
        this.routes()
    }

    public routes() {
        this.router.get('/',this.controller.getMovies)
        this.router.post('/',upload.single('movie'),this.controller.createMovie)
    }
}

我认为控制器代码在这里无关紧要,因为我的问题是关于引用cb(null,file.originalname)提供的数据。有人知道如何引用它吗?

解决方法

该URL将是您的s3存储桶URL +文件名。文件名将在req.files对象中。

如本Reddit帖子所述:https://www.reddit.com/r/node/comments/98azig/how_do_i_get_the_uploaded_files_url_on_aws_when/

,

上传到S3存储桶后,应返回数据,您可以在其中找到“位置”。这将是您的文件URL。

或者您也可以手动创建网址。

const url = `${BUCKET_URL}/${YOUR_KEY_FROM_UPLOAD_FUNCTION}`;

“ YOUR_KEY_FROM_UPLOAD_FUNCTION”也可以包含相册名称。

示例:

YOUR_KEY_FROM_UPLOAD_FUNCTION:/users/ee44e698-73cd-4fe8-99e0-f82dd4ac221b.png BUCKET_URL: https://s3.amazonaws.com/YOUR_BUCKET_NAME