Skip to content

Commit efd33ae

Browse files
authored
Video-26-Upload-Product-Image-To-AWS-S3 (#63)
1 parent 59b4e50 commit efd33ae

4 files changed

Lines changed: 28 additions & 2 deletions

File tree

backend/config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@ export default {
77
MONGODB_URL: process.env.MONGODB_URL || 'mongodb://localhost/amazona',
88
JWT_SECRET: process.env.JWT_SECRET || 'somethingsecret',
99
PAYPAL_CLIENT_ID: process.env.PAYPAL_CLIENT_ID || 'sb',
10+
accessKeyId: process.env.accessKeyId || 'accessKeyId',
11+
secretAccessKey: process.env.secretAccessKey || 'secretAccessKey',
1012
};

backend/routes/uploadRoute.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import express from 'express';
22
import multer from 'multer';
3+
import multerS3 from 'multer-s3';
4+
import aws from 'aws-sdk';
5+
import config from '../config';
36

47
const storage = multer.diskStorage({
58
destination(req, file, cb) {
@@ -17,4 +20,23 @@ const router = express.Router();
1720
router.post('/', upload.single('image'), (req, res) => {
1821
res.send(`/${req.file.path}`);
1922
});
23+
24+
aws.config.update({
25+
accessKeyId: config.accessKeyId,
26+
secretAccessKey: config.secretAccessKey,
27+
});
28+
const s3 = new aws.S3();
29+
const storageS3 = multerS3({
30+
s3,
31+
bucket: 'amazona-bucket',
32+
acl: 'public-read',
33+
contentType: multerS3.AUTO_CONTENT_TYPE,
34+
key(req, file, cb) {
35+
cb(null, file.originalname);
36+
},
37+
});
38+
const uploadS3 = multer({ storage: storageS3 });
39+
router.post('/s3', uploadS3.single('image'), (req, res) => {
40+
res.send(req.file.location);
41+
});
2042
export default router;

frontend/src/screens/ProductsScreen.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ function ProductsScreen(props) {
8181
bodyFormData.append('image', file);
8282
setUploading(true);
8383
axios
84-
.post('/api/uploads', bodyFormData, {
84+
.post('/api/uploads/s3', bodyFormData, {
8585
headers: {
8686
'Content-Type': 'multipart/form-data',
8787
},

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
"description": "Demo : https://amazonaapp.herokuapp.com/",
55
"main": "index.js",
66
"dependencies": {
7+
"aws-sdk": "^2.702.0",
78
"body-parser": "^1.19.0",
89
"dotenv": "^8.2.0",
910
"eslint-plugin-react": "^7.19.0",
1011
"express": "^4.17.1",
1112
"jsonwebtoken": "^8.5.1",
1213
"mongoose": "^5.8.11",
13-
"multer": "^1.4.2"
14+
"multer": "^1.4.2",
15+
"multer-s3": "^2.9.0"
1416
},
1517
"devDependencies": {
1618
"@babel/cli": "^7.8.4",

0 commit comments

Comments
 (0)