首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python -通过JSON发送文件

Python -通过JSON发送文件
EN

Stack Overflow用户
提问于 2017-03-02 14:52:21
回答 1查看 4.3K关注 0票数 1

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

对于文本聊天消息,我目前使用JSON库通过套接字发送序列化的字典,并在两端对其进行解码。像这样的东西

代码语言:javascript
运行
复制
message = raw_input("Message: ")
payload = {"username": self.username, "message": message}
payload["type"] = constants.CHAT
socket.send(json.dumps(payload), False)

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

这是发送文件的正确方法吗?如果是这样,我似乎不知道如何将文件转换为JSON字符串以便通过网络发送它。这就是我正在尝试的

代码语言:javascript
运行
复制
fh = open('foo.wav', 'rb')
payload = {}
payload['content'] = fh.read()
import json
js = json.dumps(payload)

这是我得到的错误

代码语言:javascript
运行
复制
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 4-5: invalid continuation byte

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

我的目标是,一旦这个工作完成,我可以让这个事务的接收端代码看起来像这样

代码语言:javascript
运行
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-02 15:10:42

您需要将二进制blob转换为可表示为字符串的内容(不含随机控制字符等)。典型的方法是执行某种encoding such as base64

代码语言:javascript
运行
复制
import base64
payload['content'] = base64.b64encode(fh.read())

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

然后在另一边:

代码语言:javascript
运行
复制
fileData = base64.b64decode(payload['content'])
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42548675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档