Skip to main content

Node Upload Image to S

  • A simple end point to upload an image to S3

Code​

const AWS = require("aws-sdk");
const fs = require("fs");
import { IncomingForm } from "formidable";

AWS.config.update({
accessKeyId: process.env["ACCESS_KEY_ID"],
secretAccessKey: process.env["SECRET_ACCESS_KEY"],
region: process.env["REGION"],
});

export default async function handler(req, res) {
const s3 = new AWS.S3();
const form = new IncomingForm();
form.parse(req, async (err, fields, files) => {
if (err) {
console.error("Error", err);
throw err;
}

try {
console.log("received request", fields);
const path = files.image[0].filepath;
const file = fs.createReadStream(path);
const key = `${Date.now()}-${Math.floor(Math.random() * 10000)}.jpg`;
const uploadParams = {
Bucket: process.env["BUCKET"],
Key: key,
Body: file,
ContentType: files.image.type,
};

console.log("uploading to s3 blob ", uploadParams.Key);
const uploadResult = await s3.putObject(uploadParams).promise();
console.log(uploadResult);
const imageUrl = `https://${uploadParams.Bucket}.s3.amazonaws.com/${uploadParams.Key}`;
res.status(200).json({ success: true, imageUrl });
fs.unlink(path, () => {});
} catch (error) {
console.error("Error uploading to S3:", error);
res.status(500).json({ success: false, error: "Internal Server Error" });
}
});
}

export const config = {
api: {
bodyParser: false,
},
};