使用Python + Stomp.py和ActiveMQ发送/接收图像

时间:2014-04-16 08:00:32

标签: python django image activemq stomp

我尝试通过ActiveMQ python + stomp.py发送/接收图片。它从内存中的图像开始,从前端上传。一个脚本将其发送到AMQ,另一个脚本从那里接收,写入文件并将链接返回到前端。

但是出了问题 - 因为文件没有显示图片。具有接收图像的文件几乎与原始图像的大小相匹配,仅大3-4K字节。但它没有任何表现。

我无法了解会发生什么...... AMQ是否会在带有图像数据的消息中添加内容,或者是什么?有什么想法吗?

LISTENER CLASS CODE:

class MyListener(object):
    msglist = []

    def __init__(self):
        self.msglist = []

    def on_error(self, headers, message):
        self.msglist.append('<[ERROR]> ' + message)

    def on_message(self, headers, message):
        self.msglist.append(message)

发送IMG信息代码:

if request.FILES.get('image2send'):
    img = request.FILES['image2send']
    conn = stomp.Connection()
    conn.set_listener('', MyListener())
    conn.start()
    conn.connect()
    conn.send(body=' '.join(img), destination='/queue/test_img', headers={'persistent': 'true'})
    time.sleep(2)
    conn.disconnect()

收到IMG消息代码:

lst = MyListener()
conn = stomp.Connection()
conn.set_listener('', lst)
conn.start()
conn.connect()
conn.subscribe(destination='/queue/test_img', id=1, ack='auto')
time.sleep(2)
conn.disconnect()
if len(lst.msglist) > 0:
    dest = open(MEDIA_ROOT + 'amq_getpic/thepic.png', 'wb+')
    dest.write(lst.msglist[0])
    dest.close()

1 个答案:

答案 0 :(得分:1)

问题出在发送IMG消息代码

原始字符串:

conn.send(body=' '.join(img),
          destination='/queue/test_img',
          headers={'persistent': 'true'})

固定:

conn.send(body=''.join(img),
          destination='/queue/test_img', 
          headers={'persistent': 'true'})

发送的正文字符串中的空格正在破坏文件