#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
объект, который решает мою проблему: D2. Я использовал
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