-
Notifications
You must be signed in to change notification settings - Fork 4
/
index.js
57 lines (43 loc) · 1.06 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
var Busboy = require('co-busboy')
var rimraf = require('rimraf')
var path = require('path')
var cp = require('fs-cp')
var fs = require('mz/fs')
var os = require('os')
var slice = [].slice
module.exports = function* (req, options) {
options = options || {}
options.autoFields = true
var tmp = options.tmp || os.tmpdir()
var folder = path.join(tmp, uid())
yield fs.mkdir(folder)
var parts = Busboy(req, options)
var obj = new Output(folder)
var part
while (part = yield parts) {
if (!part.filename)
part.filename = uid()
part.path = path.join(folder, part.filename)
obj.file[part.filename] = part
obj.files.push(part)
yield cp(part, part.path)
}
obj.field = parts.field
obj.fields = parts.fields
return obj
}
function Output(folder) {
this.file = {}
this.files = []
this.field = {}
this.fields = []
this.path = folder
}
Output.prototype.rimraf =
Output.prototype.dispose = function dispose(cb) {
rimraf(this.path, cb || noop)
}
function uid() {
return Math.random().toString(36).slice(2)
}
function noop() {}