微信小程序上传图片到Qt 4接收显示并储存

由于打算想利用qt +opencv做图像识别的服务器,前端利用流行的微信小程序搭建。在搞微信小程序上传图片到qt并解析过程遇到不少问题,现在记录下,本人没有用qt的http接口和模块,因为只是通过操纵tcp协议获取到的数据进行解析。

如下面为小程序发上来的数据包:

"POST / HTTP/1.1

content-type: multipart/form-data; boundary=--------------------------521858318383516070054717

Referer: https://servicewechat.com/wxfca1ec4a7345fb1a/devtools/page-frame.html

host: 192.168.1.101:8060

content-length: 12392745

Connection: close

 

----------------------------521858318383516070054717

Content-Disposition: form-data; name="shopId"

 

 

----------------------------521858318383516070054717

Content-Disposition: form-data; name="uploadFile"; filename="wxfca1ec4a7345fb1a..7247cd00adcb1d7833276bc5dfc1929f.jpg"

Content-Type: image/jpeg

 

???à

参考过Http的post命令都说数据是从“boundary=”开始,其实也算是,不过那个数据是指微信小程序发过来的数据不包含报头信息,其中数据里面也有报文头,这里其实也不怎么关心,我们只需要知道文件数据包总大小和图片开始位置,这个可以直接利用函数size()算出来,不用关心数据里面,其次就是图片开启位置是“Content-Type: image/jpeg”的后面,网上也是这么说的,但是对照http文档这里要有两个回车换行才是真正的数据(图片),分析如下:

利用qt函数查找对应的字符的后面20字节显示,

bite.indexOf("image/jpeg",0);

输出十六进制:696d6167652f6a7065670d0a0d0affd8ffe00010

0d0a0d0a这个为两个回车换行紧接就是数据,数据开头就是ffd8ffe00010.......

所以依据这个规律就可以获取到图片数据

附上重要代码:

int start=bite.indexOf("image/jpeg",0)+14+ui->lineEdit->text().toInt();
int stop=bite.size()-start;

    //图片显示
    QPixmap pixmap;
    pixmap.loadFromData(bite.mid(start,stop-1));
    ui->label->setPixmap(pixmap);
    // 缓存到本地
    QFile file("D:/Qt5/Qt5_Code/build-Demo_Http_RevPIC-Desktop_Qt_5_7_0_MinGW_32bit-Debug/head1.jpg");
    if (file.open(QIODevice::Append))
        file.write(bite.mid(start,stop));
    //删除数据包
    bite.clear();

就是那么简单,有什么问题可以留言下面!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值