最近自己在构想做一个简单的ERP管理系统,因本人对web开发始终没有太大的进步,所以暂时决定采用C/S架构模式。在准备阶段先做一部分测试工作。
首先确定前后端采用MQTT进行通讯,别问我为什么,因为他简单,不需要做太多的处理。既然是简单的ERP,练手用的,就不讲究那么多的技术方案了。
1、如果有人员管理模块,那么避免不了需要上传图片。那么图片如何保存呢?
原本想在数据库中保存图片路径,然后通过MQTT上传图片文件。那么客户端显示咱们办,总不能下载到本地在显示吧。。。
其实有解决办法,就是走流模式,那么有要走socket通讯。 麻烦。。。
解决方案仍旧采用MQTT协议:
1)先将图片转为 Byte[]数组
2)虽然MQTT传输时使用的也是 Byte数据,但是图片直接转换的Byte数组无法直接使用;需要转换一下。
3)将图片的Byte数组转为 Base64的字符串,再将字符串转为转为utf8 的byte数组才可以使用。
具体代码如下
ImageConverter imageConverter = new ImageConverter();
byte[] imageBytes = (byte[])imageConverter.ConvertTo(pictureBox2.Image, typeof(byte[]));
string imageString = Convert.ToBase64String(imageBytes);
byte[] mqttPayload = Encoding.UTF8.GetBytes(imageString);
msg.Payload = mqttPayload;
mqttClient.PublishMessage(msg);
显示的代码如下
private void MqttClient_OnMqttMessageReceived(MqttClient client, string topic, byte[] payload)
{
string payLoadString = Encoding.UTF8.GetString(payload);
byte[] imageByte = Convert.FromBase64String(payLoadString);
MemoryStream ms = new MemoryStream(imageByte);
Image image = Image.FromStream(ms);
pictureBox1.Image = image;
}
既然图片可以这样转换,那么文件是否也可以呢?需要进一步实验。
2、MQTT协议传输简单的数据还可以,但是我们程序中会遇到DataTable类型的数据该怎么传输呢?
解决方式为将DataTable类型序列化,然后转为Byte数组再传输,代码如下:
string jstr = JsonConvert.SerializeObject(table);
byte[] test = Encoding.UTF8.GetBytes(jstr);
博客是记录我的学习过程的,希望也能帮助大家,写的不好,大家勿喷。
标签:string,C#,Image,传输,MQTT,Byte,byte,图片 From: https://blog.51cto.com/epit/6176383