Как связать URL S3 с MongoDB в Node.js ?

#node.js #mongoose #multer #multer-s3

#node.js #mongoose #мультер #мультер-s3

Вопрос:

У меня пустой ум о том, как связать конкретный URL-адрес фильма с mongoose моделью. Я использую multer-s3 и multer для form/multi-part body для загрузки определенного файла, и я буквально понятия не имею, как получить URL multer -адрес, чтобы поместить его в базу данных.

 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)
    }
}
  

Я думаю, что код контроллера здесь не имеет значения, потому что моя проблема связана со ссылкой на данные, предоставленные at cb(null, file.originalname) . У кого-нибудь есть идея, как на него ссылаться?

Ответ №1:

URL-адрес будет вашим URL-адресом корзины s3 именем файла. имена файлов будут указаны в объекте req.files.

Как упоминалось в этом сообщении Reddit: https://www.reddit.com/r/node/comments/98azig/how_do_i_get_the_uploaded_files_url_on_aws_when /

Комментарии:

1. Спасибо, приятель! Я искал req.files объект, который решает мою проблему: D

2. Я использовал req.file.location для возврата ссылки на мой S3, это работает потрясающе! : D

Ответ №2:

После загрузки в корзину S3 должны быть возвращены данные, в которых вы можете найти «Местоположение». Это будет ваш 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