/
file-api.js
62 lines (46 loc) · 1.33 KB
/
file-api.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
var fs = require('fs');
var qs = require('qs');
var imageSize = require('image-size');
function convertToBase64(buffer, mimetype) {
return 'data:' + mimetype + ';base64,' + buffer.toString('base64');
}
function fileApi() {
return function (req, res, next) {
var queryString = '';
req.files = {};
req.images = {};
req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
var buffersArray = [];
file.on('data', function (data) {
buffersArray.push(data);
});
file.on('end', function () {
var bufferResult = Buffer.concat(buffersArray);
var fileObj = {
name: filename,
type: mimetype,
mime: mimetype,
size: bufferResult.length,
dataURL: convertToBase64(bufferResult, mimetype)
};
req.files[fieldname] = fileObj;
if (mimetype.indexOf('image/') === 0) {
fs.writeFileSync(filename, bufferResult);
var size = imageSize(filename);
fileObj.width = size.width;
fileObj.height = size.height;
req.images[fieldname] = fileObj;
fs.unlinkSync(filename);
}
});
});
req.busboy.on('field', function (key, value) {
queryString += encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&';
});
req.busboy.on('finish', function () {
req.body = qs.parse(queryString);
next();
});
};
}
module.exports = fileApi;