使用Python+Stomp.py和ActiveMQ发送/接收图像
我正在尝试用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'})
发送的内容字符串中有一个空格,导致文件出现了问题。