Python通过JSON发送文件

2024-06-26 03:50:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用ws4py创建一个实时聊天应用程序(如果有更好的套接字库,我会很乐意推荐),并且我希望在我的应用程序中实现文件传输(特别是.wav文件)。在

对于文本聊天消息,我目前正在使用JSON库在我的套接字上发送一个序列化字典,并在两边解码。像这样的东西

message = raw_input("Message: ")
payload = {"username": self.username, "message": message}
payload["type"] = constants.CHAT
socket.send(json.dumps(payload), False)

我希望能够对文件传输做同样的事情,这样我就可以发送一个JSON,其中一个字段是.wav文件的数据,其他字段则是用户名、文件名、文件扩展名等。。。在

这是发送文件的正确方法吗?如果是这样的话,我似乎不知道如何将一个文件放入JSON字符串中,然后通过网络发送。这就是我要做的

^{pr2}$

这就是我得到的错误

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 4-5: invalid continuation byte

如何对包含文件的JSON进行序列化和反序列化,以便通过套接字发送它?在

我的目标是一旦这项工作成功,我就可以让这个事务的接收端代码如下所示

def received_message(self, received_message):
    payload = json.loads(received_message)
    filename = payload['filename']
    fileData = payload['content']
    fh = open(filename, 'wb')
    fh.write(fileData)
    fh.close()

Tags: 文件selfjson应用程序message序列化usernamefilename
1条回答
网友
1楼 · 发布于 2024-06-26 03:50:25

你需要把二进制blob变成可以用字符串表示的东西(没有随机控制字符等)。典型的方法是做一些encoding such as base64。在

import base64
payload['content'] = base64.b64encode(fh.read())

它生成二进制数据的十六进制字符串表示形式。在

另一方面:

^{2}$

相关问题 更多 >