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

2 投票
1 回答
2242 浏览
提问于 2025-04-18 02:56

我正在尝试用python + stomp.py通过ActiveMQ发送和接收图片。这个过程是这样的:我从前端上传了一张图片,它被保存在内存中。一个脚本负责把这张图片发送到AMQ,另一个脚本则从那里接收图片,写入文件,并把文件链接返回给前端。

但是出现了问题——因为文件里没有显示图片。接收到的图片文件大小几乎和原始文件一样,只大了3-4 Kbytes,但打开却什么都看不见。

我搞不清楚发生了什么……AMQ是不是在图片数据的消息里添加了什么东西,还是别的什么原因?有没有什么想法?

监听器类代码:

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)

发送图片消息的代码:

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()

接收图片消息的代码:

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 个回答

1

问题出在发送图片消息的代码上。

原始字符串:

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

修复后的代码:

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

发送的内容字符串中有一个空格,导致文件出现了问题。

撰写回答