c# - IBM XMS .Net 如何从 MQ 接收 png 和 jpg 等图像文件
问题描述
我有一个 .net XMS 客户端来接收来自 MQ 的消息。它可以很好地接收文本文件。但是当我尝试接收 .zip 或 png 文件时,问题就开始了。问题是保存的文件已损坏并且总是将其解释为文本消息。
var filename = "test.png";
else if (message is IBytesMessage)
{
IBytesMessage bytesMessage = (IBytesMessage)message;
var messageLength = bytesMessage.ReadInt();
byte[] uploadPayload = new byte[messageLength];
bytesMessage.ReadBytes(uploadPayload, messageLength);
var filePath = _fileUtil.SaveBytesFile(fileName, uploadPayload);
return filePath;
}
if (message is ITextMessage)
{
var msg = (ITextMessage)message;
var result = msg.Text;
var plainTextBytes = Encoding.UTF8.GetBytes(result);
var filePath = _fileUtil.SaveBytesFile(fileName, plainTextBytes);
return filePath;
}
msg.Text删除字符。
我在记事本++中打开了原始的png文件并找到了字符,例如下面
O-humMkkVøgÆUf¯éÙô
我还尝试复制文本并将文本粘贴到新文件中会损坏文件。我错过了什么...被翻译成
O-humMkkV?g?Uf????
无论如何都要用缺少的字符来阅读它
解决方案
将二进制数据(文件)作为IBytesMessage类型发送到 MQ 。
您应该使用BodyLength来定义 byte[] 的大小,而不是ReadInt。
更改以下行:
var messageLength = bytesMessage.ReadInt();
至:
var messageLength = (int)bytesMessage.BodyLength;
当内容为文本时,ITextMessage逻辑按预期工作。
推荐阅读
- c - 不断提示用户,直到提供有效值-while 循环 c 编程
- python - Scipy(最初为 Hessian 提供了来自 scipy 的后续 Hessian)
- css - 伪元素的默认样式与它们各自的原始元素的样式是否不同?
- forms - 从现有实体 Symfony4 生成表单
- javascript - 如何在反应应用程序中预取视频?
- matlab - 绘制作为时间函数的自相关
- android - 无法从 Android 模拟器访问 Rails-API-Server
- python - 如何在 Python 中以编程方式启动 appium 服务器
- python - uWSGI Emperor 不会通过触摸 .ini 文件来重新加载 Vassal
- javascript - laravel ajax 表单不会执行提交按钮