内部做了很多服务,在服务间调用,常规用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()
}
})
以上代码供参考。
文章讲述了在Node.js后端服务中,作者改进了文件传递的方法,避免了临时文件问题,通过fs.createReadStream和FormData结合axios进行HTTP文件流的处理,提供了一个更高效的代码示例。
1923

被折叠的 条评论
为什么被折叠?



