我是靠谱客的博主 彩色泥猴桃,最近开发中收集的这篇文章主要介绍node.js 微信生成二维码B接口,不占用硬盘存储直接上传到七牛服务器实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这几天工作中遇到需要预生成微信二维码的需求。

小程序开发文档中讲的也非常简略,B接口很坑爹地返回一个二进制流(也许这就是无限制数量的原因吧,微信只提供计算服务,不提供存储服务。)

原本利用fetch来处理,着实费了一番手脚

return fetch(url, init)
.then(
(response)=>{
return response.text()
})

通过这种形式获取微信api返回的二维码二进制流,再上传到七牛。是行不通的,原因是response.text()包含的并不仅仅是图片的二进制数据,使整个网页返回的数据。跟本文需求是风马牛不相及的。

花了时间查了下fetch pipe的实现,很遗憾没有查到。

幸运的是request包含了pipe的实现。git地址:https://github.com/request/request

废话不多说,直接上码。


const request = require('request');
const concat = require('concat-stream');
const qiniu = require('qiniu');
function concatPro (buffer){
var formUploader = new qiniu.form_up.FormUploader(config);
var putExtra = new qiniu.form_up.PutExtra();
/**
* 两种形式。
* 1、直接利用pipe过来的buffer,put到七牛
* 2、将pipe过来的buffer转成可读流,putStream到七牛
* 照qiniuqiniustorageform源码来看,两者无区别,本身都会转成可读流形式putStream
*/
// const readableStream = Stream.Readable();
// readableStream.push(buffer);
// readableStream.push(null);
return new Promise(
(resolve, reject)=> {
//
formUploader.putStream(uploadToken, fileName, readableStream, putExtra, function (respErr, respBody, respInfo) { //
传入可读流
formUploader.put(uploadToken, fileName, buffer, putExtra, function (respErr, respBody, respInfo) { //
传入buffer
if (respErr) {
reject(respErr);
}
if (respInfo.statusCode == 200) {
console.log(respBody);
} else {
console.log(respInfo.statusCode);
console.log(respBody);
}
resolve(respBody);
});
});
}
return request({
method: "post",
url: URL,
body: JSON.stringify(
{
scene: xxx,
page: xxx
}
)
//
pipe导出的是数据流,而输出concatPro是个普通函数,我们需要把输入流转化为普通的buffer,这时使用concat-stream
}).pipe(concat(concatPro));


拓展阅读:    理解nodejs的stream和pipe机制

最后

以上就是彩色泥猴桃为你收集整理的node.js 微信生成二维码B接口,不占用硬盘存储直接上传到七牛服务器实现的全部内容,希望文章能够帮你解决node.js 微信生成二维码B接口,不占用硬盘存储直接上传到七牛服务器实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部