如何使用 multer 动态指定要上传到我的 s3 存储桶中的文件路径
How do I dynamically specify a file path I would like to upload to in my s3 bucket using multer
所以,我对 Nodejs 很陌生,我正在尝试实现 API 以将文件上传到 s3 存储桶。但是,我想指定将每个文件上传到的文件路径作为可选参数。实现这一目标的最简单方法是什么?这是上传文件的原始代码
require("dotenv/config");
const express = require("express");
const multer = require("multer")
const AWS = require("aws-sdk")
const app = express();
const port = process.env.PORT || 3000;
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_ID,
secretAccessKey: process.env.AWS_SECRET,
region: process.env.AWS_REGION
})
const storage = multer.memoryStorage({
destination: (req, file, callback) => {
callback(null, "")
}
})
const upload = multer({storage}).single("file");
app.post("/upload", upload, (req, res) => {
let myFile = req.file.originalname
const params = {
Bucket: process.env.AWS_BUCKET_NAME,
Key: myFile,
Body: req.file.buffer,
}
s3.upload(params, (error, data) => {
if(error) {
res.status(500).send(error)
}
res.status(200).send(data)
})
});
app.listen(port, () => {
console.log(`Server is up at ${port}`)
});
如果您尝试将文件上传到文件夹,AWS s3 会通过添加前缀来模拟此操作。您可以通过添加文件夹名称来更改Key参数。
app.post("/upload/:directory", upload, (req, res) => {
let myFile = req.file.originalname
let path = req.params.directory
const params = {
Bucket: process.env.AWS_BUCKET_NAME,
Key: `${path}/${myFile}`,
Body: req.file.buffer,
}
s3.upload(params, (error, data) => {
if(error) {
res.status(500).send(error)
}
res.status(200).send(data)
})
});
所以,我对 Nodejs 很陌生,我正在尝试实现 API 以将文件上传到 s3 存储桶。但是,我想指定将每个文件上传到的文件路径作为可选参数。实现这一目标的最简单方法是什么?这是上传文件的原始代码
require("dotenv/config");
const express = require("express");
const multer = require("multer")
const AWS = require("aws-sdk")
const app = express();
const port = process.env.PORT || 3000;
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_ID,
secretAccessKey: process.env.AWS_SECRET,
region: process.env.AWS_REGION
})
const storage = multer.memoryStorage({
destination: (req, file, callback) => {
callback(null, "")
}
})
const upload = multer({storage}).single("file");
app.post("/upload", upload, (req, res) => {
let myFile = req.file.originalname
const params = {
Bucket: process.env.AWS_BUCKET_NAME,
Key: myFile,
Body: req.file.buffer,
}
s3.upload(params, (error, data) => {
if(error) {
res.status(500).send(error)
}
res.status(200).send(data)
})
});
app.listen(port, () => {
console.log(`Server is up at ${port}`)
});
如果您尝试将文件上传到文件夹,AWS s3 会通过添加前缀来模拟此操作。您可以通过添加文件夹名称来更改Key参数。
app.post("/upload/:directory", upload, (req, res) => {
let myFile = req.file.originalname
let path = req.params.directory
const params = {
Bucket: process.env.AWS_BUCKET_NAME,
Key: `${path}/${myFile}`,
Body: req.file.buffer,
}
s3.upload(params, (error, data) => {
if(error) {
res.status(500).send(error)
}
res.status(200).send(data)
})
});