1.0.5 • Published 5 years ago

@webxrd/express-body-parser v1.0.5

Weekly downloads
-
License
ISC
Repository
-
Last release
5 years ago

express-body-parser(一个可以使你直接获取request报文文件Buffer的中间件)



前言

首先:express-body-parser内部借用并保留了express-formidable的一切功能,使用了(formidable 1.2.2和express-formidable 1.2.0),唯一的区别是多了一个控制字段noDownload,你可以指定其值为true 来阻止文件被自动写入磁盘。并将文件操作权直接的交由你。中间件除了帮你提取流以外。不再做任何事情

无论是formidableexpress-formidablemulter还是multipart等body解析器,在提供强大的解析功能时,却在处理文件时并没有提供一个“供使用者可以自己直接操作流数据的功能”。

例如express-formidable如果指定uploadDir,则将其下载到uploadDir。 未指定的话:则会默认下载到操作系统内对应的你项目名称的那个temp目录内(也就是操作系统的临时文件,为了验证真实。你可以打印下file.path并去查看下temp目录)。 弊端:也就是说无论如何 《文件都将被写入磁盘》。而且无法在写入前指定文件名(默认是hash串),你只能在之后通过返回的路径执行rename。 优势:因为源码上是使用的stream管道流式写入,这么设计的好处就是不会对内存造成压力(因为无需在内存中存储这庞大的文件流)

express-body-parser提供了解决这种情况的《可选项---noDownload: true》 如果你这么做了,那么uploadDir则不会再生效,因为文件不会再被默认写入到任何地方。。而是将Buffer放在file对象上,你可以通过customBinaryStream或customOctetStream来访问它。至此:“写入到哪儿”-“何时写入”与“是否写入”“写入前命名”,这些权利都将直接交给你

express-body-parser弊端:假定你使用了noDownload:true。(如果你不使用noDownload:true,那么将与express-formidable无异) 那么意味着文件的数据流在返给你之前,它一直在内存中。不适合高并发的客户端项目,反而是适合少量文件上传的后台管理项目。


安装

npm install @webxrd/express-body-parser --save

示例

假设前端传来FormData---->>> {fileimg: <binary>}

const fs = require('fs')
const express = require('express');
const app = express();
const expressBodyParser = require('@webxrd/express-body-parser')
// 端口号
const PORT = 3015;
var opts = {
    noDownload: true
};// opts将保留一切express-formidable一切opts,唯独多了此noDownload字段
// 使用express-body-parser中间件
app.use(expressBodyParser(opts));

app.post('/upload', function (request, response) {
    console.log('request.files')
    // 在这里可以打印files对象。
    console.log(request.files)
    // 获取到的Buffer
    console.log(request.files.fileimg.customBinaryStream)
    const filePath = './static/images/'+ request.files.fileimg.name
    // 你可以直接操作Buffer!!在一些并发不高情况下可以选择牺牲一些性能,换来便捷的操作
    fs.writeFileSync(filePath, request.files.fileimg.customBinaryStream)
    response.json({filePath})
});

app.listen(PORT, function (err) {
    if (err){
        console.log(`连接${PORT}失败!`);
        throw err
    }
    console.log(`连接成功!http://127.0.0.1:${PORT}`);
});

options

这里只介绍,@webxrd/express-body-parser所提供的字段。其他所有字段将和express-formidable一样。您可以参阅它 | 字段 | 类型 | 说明 | | :--- | :--- | :--- | | noDownload | Boolean | 默认值false,此时express-body-parser将和express-formidable没有任何区别。当设置为true时。uploadDir字段将会失效。并且文件不会再写入到uploadDir或操作系统的temp目录下。与此同时。file.customBinaryStream或file.customOctetStream两个字段中将会有一个字段提供了Buffer流数据。 |

1.0.5

5 years ago

1.0.4

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.3

5 years ago

1.0.0

5 years ago