node web服务 文件中转请求

文章讲述了在Node.js后端服务中,作者改进了文件传递的方法,避免了临时文件问题,通过fs.createReadStream和FormData结合axios进行HTTP文件流的处理,提供了一个更高效的代码示例。

内部做了很多服务,在服务间调用,常规用json做数据交互或者其他内容格式也算很方便。这次遇到了一个骨头,文件的传递。

早前用过一种方法也算很中规中矩:

web服务【文件流】 -> 【保存文件】 -> 向文件解析服务【发送请求】

分两步走,网上代码颇多(分别搜两个步骤即可),不冗余。

但是,这种方法会导致无用的【临时文件】.

这让我就有点抓狂,这种解决方法就有瑕疵了,经过测试,找到一种完美一点的方法

分析常规代码,是通过fs.createReadStream读取本地文件流,需要解决的就是如何通过http接受到的文件流中转换。

其实fs.createReadStream最终得到的是 ReadStream 对象,所有转换思路,直接用 ReadStream做处理。ReadStream.from( 【http文件流】.buffer)

经过测试,仅做上述动作,post到第三方会报错,需要增加 ReadStream对象的 path 属性。

nodeJS 后端代码片段:

// file 传入的文件参数
// 关键代码
const br = ReadStream.from(file.buffer) as ReadStream
// 网络文件流需要指定。
br["path"] = file.originalname

// data.append('file', fs.createReadStream('....zip'));
const data = new FormData();
data.append('file', br);

const req = new axios.Axios({baseURL: ""})
const res = await req.post(readShpApi, data, {
        headers: {
            ...data.getHeaders()
        }
    })

以上代码供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值