【问题标题】:IBM XMS .Net how do I receive images files like png and jpg from the MQIBM XMS .Net 如何从 MQ 接收 png 和 jpg 等图像文件
【发布时间】:2021-09-28 07:48:23
【问题描述】:

我有一个 .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????

不管怎样,用缺少的字符来阅读它

【问题讨论】:

  • 由于图像是二进制的,我不会在像记事本这样只能理解文本的应用程序中打开文件。尝试在 Notepad++ 等十六进制编辑器中查看。
  • 嗨 Sashi,感谢您的输入,我的意思是 notepadd++。问题是代码中的 msg.Text 翻译它没有其他字符

标签: c# .net websphere mq xms


【解决方案1】:

将二进制数据(文件)以IBytesMessage 类型发送到 MQ。

您应该使用BodyLength 来定义字节[] 的大小,而不是ReadInt

更改以下行:

var messageLength = bytesMessage.ReadInt();

收件人:

var messageLength = (int)bytesMessage.BodyLength;

当内容为文本时,ITextMessage 逻辑按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-19
    • 2014-10-17
    • 2012-09-30
    • 2018-09-12
    • 2013-12-24
    • 1970-01-01
    • 2018-04-09
    • 2017-12-20
    相关资源
    最近更新 更多