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
|
const Busboy = require('@fastify/busboy')
function parseFormDataString (
body,
contentType
) {
const cache = {
fileMap: new Map(),
fields: []
}
const bb = new Busboy({
headers: {
'content-type': contentType
}
})
return new Promise((resolve, reject) => {
bb.on('file', (name, file, filename, encoding, mimeType) => {
cache.fileMap.set(name, { data: [], info: { filename, encoding, mimeType } })
file.on('data', (data) => {
const old = cache.fileMap.get(name)
cache.fileMap.set(name, {
data: [...old.data, data],
info: old.info
})
}).on('end', () => {
const old = cache.fileMap.get(name)
cache.fileMap.set(name, {
data: Buffer.concat(old.data),
info: old.info
})
})
})
bb.on('field', (key, value) => cache.fields.push({ key, value }))
bb.on('finish', () => resolve(cache))
bb.on('error', (e) => reject(e))
bb.end(body)
})
}
module.exports = {
parseFormDataString
}
|