如何在Node.js中link S3 URL到MongoDB?

How to link S3 URL to MongoDB in Node.js?

我对如何 link 特定电影 URL 到 mongoose 模型一无所知。我正在为 form/multi-part 正文使用 multer-s3multer 来上传特定文件,我真的不知道如何从 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 post 中所述:https://www.reddit.com/r/node/comments/98azig/how_do_i_get_the_uploaded_files_url_on_aws_when/

上传到S3 bucket后,应该会返回数据,这里可以找到一个“Location”。这将是您的文件 URL.

或者您可以手动创建一个 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