-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrouter.js
131 lines (117 loc) · 3.6 KB
/
router.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
const fs = require('fs')
const stream = require("stream");
const express = require("express");
const multer = require("multer");
const path = require("path");
const { google } = require("googleapis");
const request = require("request");
const uploadRouter = express.Router();
const upload = multer();
const http = require('http');
const GOOGLE_API_FOLDER_ID = "1Va5Cmz6xjmqTJpt_rCdjYwaEM7Lr9K2G";
const KEYFILEPATH = path.join(__dirname, "googlekey.json");
const SCOPES = ["https://www.googleapis.com/auth/drive"];
const auth = new google.auth.GoogleAuth({
keyFile: KEYFILEPATH,
scopes: SCOPES,
});
const uploadFile = async (fileObject) => {
const bufferStream = new stream.PassThrough();
bufferStream.end(fileObject.buffer);
const { data } = await google.drive({ version: "v3", auth }).files.create({
media: {
mimeType: fileObject.mimeType,
body: bufferStream,
},
requestBody: {
name: fileObject.originalname,
parents: [GOOGLE_API_FOLDER_ID],
},
fields: "id,name",
});
console.log(`Uploaded file ${data.name} ${data.id}`);
};
uploadRouter.post("/upload", upload.any(), async (req, res) => {
try {
console.log(req.body);
console.log(req.files);
const { body, files } = req;
for (let f = 0; f < files.length; f += 1) {
await uploadFile(files[f]);
}
console.log(body);
res.status(200).send("Form Submitted");
} catch (f) {
res.send(f.message);
}
});
let driveFiles = []
function processList(files) {
console.log('Processing....');
files.forEach(file => {
//console.log(file.name + '|' + file.size + '|' + file.createdTime + '|' + file.modifiedTime);
driveFiles.push(file)
});
}
function getList(drive, pageToken) {
console.log("inside getList")
drive.files.list({
corpora: 'user',
pageToken: pageToken ? pageToken : '',
fields: 'nextPageToken, files(*)',
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err);
const files = res.data.files;
if (files.length) {
console.log('Files:');
processList(files);
if (res.data.nextPageToken) {
getList(drive, res.data.nextPageToken);
}
} else {
console.log('No files found.');
}
});
}
uploadRouter.get("/getFiles", async (req,res) => {
driveFiles = []
console.log("Inside uploadRouter.get")
const drive = google.drive({ version: 'v3', auth });
getList(drive, '');
setTimeout(() => {
res.send(driveFiles);
},1000);
});
uploadRouter.post("/getFile/:id", async (req,res) => {
const drive = google.drive({version: 'v3', auth});
var dest = fs.createWriteStream(req.body.name);
const fileStream = fs.createWriteStream(req.body.name);
console.log("File to be downloaded "+req.body.name)
drive.files.get(
{fileId: req.body.id, alt: 'media'},
{responseType: "stream"},
(err, {data}) => {
if (err) {
console.log(err);
return;
}
data
.on("end", () => console.log("Done."))
.on("error", (err) => {
console.log(err);
return process.exit();
})
.pipe(dest);
}
);
const file = await drive.files.get({
fileId: req.body.id,
alt: 'media',
}, {
responseType: "stream"
}
);
file.data.on('end', () => console.log('onCompleted'))
file.data.pipe(fileStream);
})
module.exports = uploadRouter;