请原谅我,如果我问得很愚蠢。我是 AWS 和无服务器框架的新手,但我的问题是相同的代码(用 Express js 编写,不使用任何无服务器逻辑,并且对于此代码,有一个单独的 ELASTIC BEANSTALK 后端)能够将图像上传到 AWS s3 并生成图像url 在浏览器中显示图像,但是使用无服务器框架配置的相同代码(有用于此的 LAMDA 功能)也能够将图像上传到 aws s3(对于两种情况存储桶相同),但这次结果图像 url 仅显示裂纹图像(我的意思是每当图像无法打开时,默认图像就是这样的)。在这两种情况下,我在上传到 s3 后得到一个图像 url,并且该 url 包含其他文本数据,我存储在我的 aws rds mysql db 中
**我的 serverless.Yaml 文件 **
service: serverlessbackend
frameworkVersion: "3"
provider:
name: aws
runtime: nodejs18.x
region: ap-south-1
timeout: 10
environment:
DB_HOST: "something.rds.amazonaws.com"
DB_USER: "user"
DB_PASSWORD: "something"
DB_NAME: "something"
AWS_ACCESSKEY: "something"
AWS_SECRETKEY: "something"
MY_AWS_REGION: "ap-south-1"
functions:
myLambdaFunction:
handler: index.handler
events:
- http: ANY /
- http: "ANY {proxy+}"
plugins:
- serverless-offline
index.js 文件
const serverless = require("serverless-http");
const express = require("express");
const app = express();
const mysql = require("mysql2");
app.use(express.json());
let pool = require("./db/index");
let categoryRoutes = require("./routes/categoryRoutes");
app.use("/category", categoryRoutes);
module.exports.handler = serverless(app);
** Categoryroutes.js 文件 **
const express = require("express");
const { pool } = require("../db");
const { deleteFromAws, uploadToAws } = require("../utils/aws");
const multer = require("multer");
const { uniqueString } = require("../utils/unique");
const router = express.Router();
const storage = multer.memoryStorage();
const upload = multer({
storage: storage,
});
router.post("/", upload.single("image"), async (req, res) => {
console.log(req.file);
if (!req.file) {
return res.status(400).json({ error: "No file uploaded" });
}
try {
let result = await uploadToAws(req.file);
let { Location: imgUrl, Key } = result;
console.log(result);
if (imgUrl && Key) {
const query = "INSERT INTO temp SET ?";
const data = {
category: req.body.category,
category_id: uniqueString(),
image_path: imgUrl,
image_name: Key,
};
// The "?" in the query is a placeholder for the data object
pool.query(query, data, (err, result) => {
if (err) {
console.log(err);
return res.status(400).json({ message: err.message });
}
// console.log(result);
return res.status(200).json({ message: "File uploaded successfully" });
});
} else {
throw new Error("something wrong");
}
} catch (err) {
console.log(err.message);
res.send(err.message);
}
});
这里上传到aws文件:
const AWS = require("aws-sdk");
const { generateUniqueImageName } = require("./unique");
// Configure AWS credentials
AWS.config.update({
accessKeyId: process.env.AWS_ACCESSKEY,
secretAccessKey: process.env.AWS_SECRETKEY,
region: process.env.MY_AWS_REGION, // e.g., 'us-east-1'
});
// Create a new instance of the S3 service
const uploadToAws = async (file) => {
// console.log(file);
const s3 = new AWS.S3();
const params = {
Bucket: "something",
Key: `uploads/IMG-${generateUniqueImageName(file.originalname)}`, // The file name to be used in the S3 bucket
ContentType: file.mimetype,
Body: file.buffer, // The file content as a buffer
};
return await s3.upload(params).promise();
};
我已经检查了我的访问密钥和秘密密钥,一切正常。