我正在try 从我当前的前端添加一个DeleteImage函数,该函数通过API路径与我的后端通信.下面是我用来上传图片的一个函数:
const uploadImages = async (ev) => {
const files = ev.target?.files;
if (files?.length > 0) {
setIsUploading(true);
const data = new FormData();
for (const file of files) {
data.append("file", file);
}
const res = await axios.post("/api/upload", data);
setImages((oldImages) => {
return [...oldImages, ...res.data.links];
});
setIsUploading(false);
}
};
下面是"ploadImages"函数与之通信的upad.js API路径:
import multiparty from "multiparty";
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import fs from "fs";
import mime from "mime-types";
const bucketName = "ecommerce";
export default async function handle(req, res) {
const form = new multiparty.Form();
const { fields, files } = await new Promise((resolve, rejecct) => {
form.parse(req, (err, fields, files) => {
if (err) rejecct(err);
resolve({ fields, files });
});
});
console.log("length", files.file.length);
const client = new S3Client({
region: "us-west-1",
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY,
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
},
});
const links = [];
for (const file of files.file) {
const ext = file.originalFilename.split(".").pop();
const newFilename = Date.now() + "." + ext;
await client.send(
new PutObjectCommand({
Bucket: bucketName,
Key: newFilename,
Body: fs.readFileSync(file.path),
ACL: "public-read",
ContentType: mime.lookup(file.path),
})
);
const link = `https://${bucketName}.s3.amazonaws.com/${newFilename}`;
links.push(link);
}
return res.json({ links });
}
export const config = {
api: { bodyParser: false },
};
我如何创建一个类似的函数来从我的Amazon S3存储桶中删除图像?我想我还需要创建一个"delete.js"API路径?或许不是呢?
谢谢各位编码员.
我try 了This,但它只从前端删除图像.我也需要将其从后端删除:
const deleteImage = (index) => {
const updatedImages = [...images];
updatedImages.splice(index, 1);
setImages(updatedImages);
};