forked from peihsinsu/express-gcs-uploader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
73 lines (66 loc) · 2.48 KB
/
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
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
var fs = require('fs');
var multer = require('multer');
var gcloud = require('gcloud');
var log = require('nodeutil').simplelog;
var gcs;
var module_opts = {};
if(process.env.LOG_LEVEL) log.setLevel('TRACE');
exports.auth = function(opts) {
if(!opts) throw "no auth configured...";
if(!opts.projectId) throw "no project id....";
if(!opts.keyFilename) throw "np keyFilename...";
module_opts = opts;
gcs = gcloud.storage({
projectId: opts.projectId,
keyFilename: opts.keyFilename
});
}
exports.init = function(opts) {
if(opts && !opts['onFileUploadComplete']) {
opts['onFileUploadComplete'] = function(file, req, res) {
if(module_opts.bucket) {
log.trace('Saving data to google cloud storage...');
var bucket = gcs.bucket(module_opts.bucket);
var fileStream = fs.createReadStream(module_opts.rootdir + '/' + file.path);
fileStream.pipe(bucket.file(module_opts.keep_filename ? file.originalname : file.name).createWriteStream());
if(module_opts.keep_filename) {
log.trace('try to rename local filename from %s to %s',
module_opts.rootdir + '/' + module_opts.upload_url + '/' + file.name,
module_opts.rootdir + '/' + module_opts.upload_url + '/' + file.originalname);
fs.rename(module_opts.rootdir + '/' + module_opts.upload_url + '/' + file.name,
module_opts.rootdir + '/' + module_opts.upload_url + '/' + file.originalname, function(err){
if(err) log.error('rename file error:', err);
})
}
}
}
}
return (multer(opts));
}
exports.downloadproxy = function(req, res, next) {
if(req.params.id) {
if(module_opts.cdn_url) {
res.redirect(module_opts.cdn_url + '/' + req.params.id);
}
if(fs.existsSync(module_opts.rootdir + '/' + module_opts.upload_url + '/' + req.params.id)) {
log.trace('Using local file');
var fileStream = fs.createReadStream(module_opts.rootdir + '/' + module_opts.upload_url + '/' + req.params.id);
fileStream.pipe(res);
} else {
log.trace('Using gcs file');
var bucket = gcs.bucket(module_opts.bucket);
var fileStream = bucket.file(req.params.id).createReadStream();
if(module_opts.cache) {
log.trace('Caching file to %s',
module_opts.rootdir + '/' + module_opts.upload_url + '/' + req.params.id);
fileStream.pipe(fs.createWriteStream(
module_opts.rootdir + '/' + module_opts.upload_url + '/' + req.params.id));
fileStream.pipe(res);
} else {
fileStream.pipe(res);
}
}
} else {
res.status(404).send('file not found!');
}
}