-
Notifications
You must be signed in to change notification settings - Fork 0
/
upload.js
75 lines (65 loc) · 1.95 KB
/
upload.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
const AWS = require('aws-sdk');
const Busboy = require('busboy');
const BUCKET_NAME = '';
const IAM_USER_KEY = '';
const IAM_USER_SECRET = '';
function uploadToS3(file) {
let s3bucket = new AWS.S3({
accessKeyId: IAM_USER_KEY,
secretAccessKey: IAM_USER_SECRET,
Bucket: BUCKET_NAME
});
s3bucket.createBucket(function () {
var params = {
Bucket: BUCKET_NAME,
Key: file.name,
Body: file.data
};
s3bucket.upload(params, function (err, data) {
if (err) {
console.log('error in callback');
console.log(err);
}
console.log('success');
console.log(data);
});
});
}
module.exports = (app) => {
// The following is an example of making file upload with additional body
// parameters.
// To make a call with PostMan
// Don't put any headers (content-type)
// Under body:
// check form-data
// Put the body with "element1": "test", "element2": image file
app.post('/api/upload', function (req, res, next) {
// This grabs the additional parameters so in this case passing in
// "element1" with a value.
const element1 = req.body.element1;
var busboy = new Busboy({ headers: req.headers });
// The file upload has completed
busboy.on('finish', function() {
console.log('Upload finished');
// Your files are stored in req.files. In this case,
// you only have one and it's req.files.element2:
// This returns:
// {
// element2: {
// data: ...contents of the file...,
// name: 'Example.jpg',
// encoding: '7bit',
// mimetype: 'image/png',
// truncated: false,
// size: 959480
// }
// }
// Grabs your file object from the request.
const file = req.files.element2;
console.log(file);
// Begins the upload to the AWS S3
uploadToS3(file);
});
req.pipe(busboy);
});
}