我正在尝试使用 Python 中的 RabbitMQ 创建一个简单的文件下载和上传服务。我制作了服务器和客户端脚本,并定义了一些对象,这些对象可以为请求在 json 中进行序列化和反序列化,因此我可以将文件 uid 或其他参数与二进制数据(使用 base64 编码)一起发送。发送小文件时一切正常,但是当我开始发送更大的文件(用 1.4mb 文本文件测试)时,我开始收到 JSONDecode 错误。我正在将发送和接收的消息转储到文件中,看起来发送的消息是格式正确的 json。但是,收到的消息似乎是乱七八糟的,例如:
发送:{"uid":"test",Rhc2Rhc2Rhc2Rhc2Rhc2Rhc2=="}
收到:Rhc2Rhc2{"uid":"test",Rhc2Rhc2Rhc2Rhc2=="}
显然,混乱的块比这大得多。有没有人遇到过这个问题?
下面是一些代码段,我可以上传完整的代码,但不是很整洁:
上传请求:
class FileSystemUploadRequest:
def __init__(self, uid, data):
self.uid = uid
self.data = data
def encode(self):
dicc = {"uid": self.uid, "data": base64.b64encode(self.data).decode()}
return json.dumps(dicc)
@staticmethod
def decode(jsonstr):
dicc = json.loads(jsonstr)
uid = dicc["uid"]
data = base64.b64decode(dicc["data"])
return FileSystemUploadRequest(uid, data)
客户(发件人):
def put_file_blocking(self, uid, data):
print(" [x] Llamaron a put_file_blocking")
corr_id = str(uuid.uuid4())
request = FileSystemUploadRequest(uid, data)
f = open("dump", "w")
f.write(request.encode())
f.close()
# Send upload request
self.channel.basic_publish(exchange='',
routing_key=self.queue_upload,
properties=pika.BasicProperties(
reply_to=self.callback_queue_name,
correlation_id=corr_id
),
body=request.encode())
服务器(接收器):
def upload_request(ch, method, props, body):
f = open("_dump", "w")
f.write(body.decode())
f.close()
# Get Upload Request
request = FileSystemUploadRequest.decode(body)
print(" [x] Received upload request for: " + request.uid)
filename = fs_dir + "/" + request.uid
LEATH
相关分类