如何在Node.js中link S3 URL到MongoDB?
How to link S3 URL to MongoDB in Node.js?
我对如何 link 特定电影 URL 到 mongoose
模型一无所知。我正在为 form/multi-part
正文使用 multer-s3
和 multer
来上传特定文件,我真的不知道如何从 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
我对如何 link 特定电影 URL 到 mongoose
模型一无所知。我正在为 form/multi-part
正文使用 multer-s3
和 multer
来上传特定文件,我真的不知道如何从 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