Repository navigation
Expand file tree
/
Copy pathserver.js
More file actions
123 lines (106 loc) · 3.82 KB
/
Copy pathserver.js
File metadata and controls
123 lines (106 loc) · 3.82 KB
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
var converter = require('./convert');
var express = require('express');
var formidable = require('formidable');
var zipstream = require('zipstream');
var async = require('async');
var fs = require('fs');
var app = express();
var port = 8080;
app.use(express.bodyParser());
function copyLastFile(folder){
var matcher = /\d+\./;
var files = fs.readdirSync(folder);
// Remove files that do not match de matcher
files = files.filter(function(file){
return file.search(matcher) != -1;
});
// Sort files
files.sort(function(a,b){
return parseInt(a.match(matcher)[0],10) - parseInt(b.match(matcher)[0],10)
});
// Get las file number
var lastFile = files[files.length-1];
var lastNumber = parseInt(lastFile.match(matcher)[0]);
// Create next file name
var newFile = lastFile.replace(matcher, lastNumber+1+'.');
// Copy last file
var srcFile = folder + '/' + lastFile;
var destFile = folder + '/' + newFile;
var content = fs.readFileSync(srcFile);
fs.writeFileSync(destFile, content);
}
app.get('/api',function(req,res){
res.send(200,'test');
})
app.put('/api/convert',function(req,res){
var options = {
format:req.query['format'] || 'video',
usetimings:req.query['usetimings'] || 'true',
slidetime:req.query['slidetime'] || '5',
verticalResolution:req.query['verticalresolution'] || '480',
fps:req.query['fps'] || '5',
quality:req.query['quality'] || '85'
}
var folder = 'tmp\\';
var fileName = folder + 'tempfile'+Math.floor((Math.random()*1000000));
var destName = fileName+'converted';
var fileStream = fs.createWriteStream(fileName);
req.pipe(fileStream);
req.on('end',function(){
var timestart = new Date().getTime();
converter.convertPpt(fileName,destName,options,function(err,response){
if(err){
res.send(500,err);
}else {
console.info('[pptconverter]:File %s converted to %s succesfully',fileName,options.format);
console.info('[pptconverter]:Conversion time ',(new Date().getTime()-timestart)/1000);
switch(options.format) {
// return the presentation converted to video with all the transitions included - very slow
case 'video':
res.sendfile(destName+'.mp4 ');
break;
// return a video made with the slides converted to images
case 'videofromjpg':
copyLastFile(destName);
var output = destName + ".mp4";
timestart = new Date().getTime();
converter.convertImagesToVideo(destName+"\\Slide%1d.jpg",output,function(err,stdout){
if(err) {
console.error(err);
} else {
console.log(stdout);
console.info('[ffmpeg]:Conversion time ',(new Date().getTime()-timestart)/1000);
res.sendfile(output);
}
})
break;
// Returns zip file with all the slides as images
case 'png':
case 'jpg':
var zip = zipstream.createZip({ level: 1 });
zip.pipe(res);
fs.readdir(destName, function(err,files){
var len = files.length;
var count = 0;
async.eachSeries(files, function(file, done){
zip.addFile(fs.createReadStream(destName+'\\'+file), { store: true,name:file }, function(){
done();
})
}, function(){
zip.finalize(function(written) { console.log(written + ' total bytes written'); });
});
})
break;
default:
res.send(501, "format not supported");
}
}
})
})
req.on('error',function(err){
console.error('error converting file '+fileName+' '+err)
res.send(err);
})
});
app.listen(port);
console.log('pptconverter listening on port '+port);