问题描述
我对如何将特定的电影URL链接到mongoose
模型没有任何想法。我正在使用multer-s3
和multer
来使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