forked from xiangpaopao/mobile-upload-demo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
129 lines (122 loc) · 4.11 KB
/
app.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
var express = require('express'),
http = require('http'),
fs = require('fs'),
path = require('path'),
busboy = require('connect-busboy'),
gm = require('gm'),
swig = require('swig'),
utility = require('utility'),
bodyParser = require('body-parser');
var app = express();
app.use(busboy());
app.engine('html', swig.renderFile);
swig.setDefaults({cache: false});
app.set('view engine', 'html');
app.set('view options', { layout: false });
app.set('views', __dirname + '/views');
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.raw({limit:10000000}));
app.use(busboy({ immediate: true }));
app.post('/upload', function(req, res) {
var extension,
mimetype = req.query['mimetype'];
switch (mimetype){
case 'image/gif':
extension = 'gif';
break;
case 'image/jpeg':
extension = 'jpg';
break;
case 'image/png':
extension = 'png';
break;
}
var filename = utility.md5(String((new Date()).getTime())) + String(parseInt(Math.random()*1000)) + '.' + extension;
var upload_path = path.join(__dirname, 'public/uploads/');
var base_url = '/uploads/';
var filePath = path.join(upload_path, filename);
var fileUrl = base_url + filename;
if(req.header('content-type')){
//非安卓
req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
console.log(fieldname,filename);
file.pipe(fs.createWriteStream(filePath));
});
req.busboy.on('finish', function() {
res.json({
success: true,
thumbUrl:fileUrl
});
});
req.pipe(req.busboy);
}else{
//安卓中采用拼接buffer的方式
var imagedata = '';
req.setEncoding('binary');
req.on('data', function (chunk) {
imagedata += chunk
});
req.on('end', function () {
fs.writeFile(filePath, imagedata, 'binary', function(err){
if (err) throw err
console.log('File saved.');
res.json({
success: true,
thumbUrl:fileUrl
});
})
});
}
});
app.post('/upload-origin', function(req, res) {
req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
var extension;
switch (mimetype){
case 'image/gif':
extension = 'gif';
break;
case 'image/jpeg':
extension = 'jpg';
break;
case 'image/png':
extension = 'png';
break;
}
var filename = utility.md5(String((new Date()).getTime())) + String(parseInt(Math.random()*1000));
var thumb_filename = filename + '_thumb';
var upload_path = path.join(__dirname, 'public/uploads/');
var base_url = '/uploads/';
var filePath = path.join(upload_path, filename + '.' + extension);
var fileUrl = base_url + thumb_filename + '.' + extension;
file.on('end', function () {
gm(filePath)
.autoOrient()
.thumbnail(200, 200)
.write(path.join(upload_path, thumb_filename + '.' + extension), function(err){
if (err) return console.dir(arguments)
console.log(this.outname + " created :: " + arguments[3])
res.json({
success: true,
thumbUrl:fileUrl
});
}
)
});
file.pipe(fs.createWriteStream(filePath));
});
req.pipe(req.busboy);
});
app.get('/', function (req, res) {
var html = [
'<p>手机传图--前端处理后上传 <a href="/front">Go</a></p>',
'<p>手机传图--直接上传 <a href="/back">Go</a></p>'
].join('');
res.send(html);
});
app.get('/front', function (req, res) {
res.render('front');
});
app.get('/back', function (req, res) {
res.render('back');
});
app.listen(3001);