multiparty 和 busboy 都可处理form类型数据,用于文件下载解析
使用方法:
const multipartry = require('multiparty');
const busboy = require('busboy');
new Promise(async (resolve, reject) => {
const form = new multipartry.Form(config)
// multipartry 保留hash名写法
form.parse(req, (err, fields, files) => {
if (err) {
reject(err)
return
}
console.log('[long] rrr', fields, files)
resolve({
fields,
files,
})
})
// // multipartry : 保留文件名写法
// form.on('part', async function (part, a, b, c) {
// if (part.filename) {
// const saveTo = path.join(uploadDir, part.filename)
// const writeStrem = fs.createWriteStream(saveTo)
// part.pipe(writeStrem)
// }
// })
// form.parse(req)
// // busboy 保留文件名写法, 如果需要hash,则需要自行实现
// const bb = busboy({ headers: req.headers })
// bb.on('file', (name, file, info) => {
// console.log('[long] kkk: ', name, file, info.filename)
// const saveTo = path.join(uploadDir, info.filename)
// file.pipe(fs.createWriteStream(saveTo))
// });
// bb.on('close', () => {
// resolve({
// file: 'success'
// })
// })
// req.pipe(bb)
})
}
需要判断路径存在
await new Promise((resolve, reject) => {
fs.stat(uploadDir, (err) => {
if (err) {
fs.mkdirSync(saveTo)
}
resolve()
})
})
使用MD5 hash可以防止文件重名,且节省空间