See it now here: https://gitea.anomalistdesign.com/trent_larson/image-api
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.8 KiB
60 lines
1.8 KiB
const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3');
|
|
const crypto = require('crypto');
|
|
const express = require('express');
|
|
const fs = require('fs');
|
|
const multer = require('multer');
|
|
const path = require('path');
|
|
require('dotenv').config()
|
|
|
|
const app = express();
|
|
const port = 3000;
|
|
|
|
// Configure AWS
|
|
const s3Client = new S3Client({
|
|
region: process.env.AWS_REGION,
|
|
credentials: {
|
|
accessKeyId: process.env.AWS_ACCESS_KEY,
|
|
secretAccessKey: process.env.AWS_SECRET_KEY
|
|
}
|
|
});
|
|
|
|
const upload = multer({ dest: 'uploads/' });
|
|
|
|
// POST endpoint to upload an image
|
|
app.post('/image', upload.single('image'), (req, res) => {
|
|
const file = req.file;
|
|
|
|
// Read the file from the temporary location
|
|
fs.readFile(file.path, async (err, data) => {
|
|
if (err) throw err; // Handle error
|
|
|
|
const hashSum = crypto.createHash('sha256');
|
|
hashSum.update(data);
|
|
const hashHex = hashSum.digest('hex');
|
|
|
|
const bucketName = 'gifts-image';
|
|
const fileName = `${hashHex}_${file.originalname}`;
|
|
const params = {
|
|
Body: data,
|
|
Bucket: bucketName, // S3 Bucket name
|
|
ContentType: file.mimetype, // File content type
|
|
Key: fileName, // File name to use in S3
|
|
};
|
|
|
|
// Upload the file to S3
|
|
try {
|
|
const command = new PutObjectCommand(params);
|
|
const response = await s3Client.send(command);
|
|
const finalUrl = `https://${bucketName}.s3.amazonaws.com/${fileName}`;
|
|
res.send(JSON.stringify({ success: true, url: finalUrl }));
|
|
} catch (uploadError) {
|
|
console.error('Error uploading to S3:', uploadError);
|
|
res.status(500).send(JSON.stringify({ success: false, message: 'Error uploading file.' }));
|
|
}
|
|
});
|
|
});
|
|
|
|
app.listen(port, () => {
|
|
console.log(`Server running at http://localhost:${port}`);
|
|
});
|
|
|
|
|