-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrecording.js
79 lines (68 loc) · 1.99 KB
/
recording.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
const express = require("express");
const fs = require("fs");
const AWS = require("aws-sdk");
const path = require("path");
let router = express.Router();
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_ACCESS_KEY,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
});
function uploadToS3(filename) {
const fileContent = fs.readFileSync(filename);
// Setting up S3 upload parameters
const params = {
Bucket: process.env.S3_BUCKET_NAME,
Key: path.join("recordings", filename), // File name you want to save as in S3
Body: fileContent,
};
// Uploading files to the bucket
s3.upload(params, function (err, data) {
if (err) {
throw err;
}
console.log(`File uploaded successfully. ${data.Location}`);
});
}
function toFile(audio, filename) {
fs.writeFileSync(
filename,
Buffer.from(
audio.replace("data:audio/ogg; codecs=opus;base64,", ""),
"base64"
)
);
}
/* GET users listing. */
router.post("/:id", function (req, res, next) {
let filename = req.params.id + ".ogg";
let { audio } = req.body;
try {
toFile(audio, filename);
console.log("Wrote to file " + filename);
} catch (err) {
console.log("File writing FAILED for " + filename);
return res.sendStatus(500);
}
try {
uploadToS3(filename);
return res.sendStatus(201);
} catch (err) {
console.log("S3 upload FAILED for " + filename);
return res.sendStatus(500);
}
});
router.get("/:id", function (req, res) {
let filename = path.join("recordings", req.params.id);
if (filename.indexOf(".ogg") === -1) {
filename = filename + ".ogg";
}
s3.getObject({ Bucket: process.env.S3_BUCKET_NAME, Key: filename })
.on("httpHeaders", function (statusCode, headers) {
res.set("Content-Length", headers["content-length"]);
res.set("Content-Type", "audio/ogg; codecs=opus");
this.response.httpResponse.createUnbufferedStream().pipe(res);
})
.send();
});
// http://localhost:5000/react/post/Ui7yGoYXg
module.exports = router;