I have an empty mind on how to link a specific movie URL to mongoose
model. I'm using multer-s3
and multer
for form/multi-part
body to upload a specific file, and I literally have no idea how to get the URL from multer
to put it into the database.
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)
}
}
I think the controller code doesn't matter here because my problem is about referencing data provided at cb(null, file.originalname)
. Does somebody have idea how to reference it?
After uploading to the S3 bucket, should be returned the data, where you can find a "Location". It will be your file URL.
Or you can create a URL manually on your side.
"YOUR_KEY_FROM_UPLOAD_FUNCTION" can also include the album name.
Examples: