-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
46 lines (42 loc) · 975 Bytes
/
index.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
const { google } = require('googleapis');
class DriveStorage {
constructor(opts) {
this.drive = google.drive(Object.assign(opts, { version: 'v3' }));
}
_handleFile(
req,
{ mimetype: mimeType, originalname: name, stream: body },
cb,
) {
this.drive.files
.create(
{
resource: {
name,
mimeType,
},
media: {
mimeType,
body,
},
},
// Workaround axios' issue of streams incorrect backpressuring, issue: https://github.com/googleapis/google-api-nodejs-client/issues/1107
{ maxRedirects: 0 },
)
.then(({ data: { id: googleId } }) =>
cb(null, {
googleId,
}),
)
.catch(err => cb(err, null));
}
_removeFile(req, { googleId: fileId }, cb) {
this.drive.files.delete(
{
fileId,
},
cb,
);
}
}
module.exports = opts => new DriveStorage(opts);