-
Notifications
You must be signed in to change notification settings - Fork 0
/
multipartUpload.js
113 lines (94 loc) · 2.71 KB
/
multipartUpload.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
const AWS = require('aws-sdk');
const s3 = new AWS.S3({ signatureVersion: 'v4' });
const region = process.env.REGION;
const bucketName = process.env.BUCKET_NAME;
AWS.config.update({ region });
exports.handler = async (event) => {
let body;
let statusCode = 200;
let headers = {
'Content-Type': 'application/json',
};
try {
switch (event.routeKey) {
case 'GET /start-upload':
const startQuery = event.queryStringParameters;
const createMultiParams = {
Bucket: bucketName,
Key: startQuery.key,
ContentType: 'video/mp4',
};
const result = await s3
.createMultipartUpload(createMultiParams, (err, data) => {
if (err) {
console.log('err: ', err);
} else {
console.log('data: ', data);
}
})
.promise();
body = {
message: {
result,
},
};
break;
case 'GET /get-upload-url':
const uploadUrlQuery = event.queryStringParameters;
const bucket = bucketName;
const getSignedUrlParams = {
Bucket: bucket,
Key: uploadUrlQuery.key,
PartNumber: uploadUrlQuery.partNumber,
UploadId: uploadUrlQuery.uploadId,
};
const presignedURL = s3.getSignedUrl('uploadPart', getSignedUrlParams);
return presignedURL;
case 'POST /complete-upload':
console.log('complete event: ', event);
const JSONRequest = JSON.parse(event.body);
const completeUploadParams = {
Bucket: bucketName,
Key: JSONRequest.key,
MultipartUpload: {
Parts: JSONRequest.parts,
},
UploadId: JSONRequest.uploadId,
};
const completeUpload = s3
.completeMultipartUpload(completeUploadParams)
.promise();
return completeUpload;
case 'DELETE /abort-upload':
console.log('delete event: ', event);
const JSONRequestAbort = JSON.parse(event.body);
const abortParams = {
Bucket: bucketName,
Key: JSONRequestAbort.key,
UploadId: JSONRequestAbort.uploadId,
};
const abortResult = s3
.abortMultipartUpload(abortParams, (err, data) => {
if (err) {
console.log('err: ', err);
} else {
console.log('success: ', data);
}
})
.promise();
body = {
message: `Abort Result: ${abortResult}`,
};
}
} catch (err) {
statusCode = 400;
body = err.message;
} finally {
body = JSON.stringify(body);
}
return {
statusCode,
body,
headers,
};
};