python - 如何上传文件并将其发送给某人 Tkinter
问题描述
我创建了一个聊天室,用户可以在其中互相发送消息,但我想添加上传文件功能,我找到了如何做到这一点:
import tkinter as tk
from tkinter import filedialog
def UploadAction(event=None):
filename = filedialog.askopenfilename()
print('Selected:', filename)
root = tk.Tk()
button = tk.Button(root, text='Open', command=UploadAction)
button.pack()
root.mainloop()
但我不知道如何将文件发送给其他用户以便他们下载
所以有人可以帮我吗
解决方案
虽然这个主题超出了主题(这个问题实际上是关于套接字而不是 tkinter),没有正确询问(请参阅如何提问),并且可能是通过 Python 中的套接字发送文件的副本,这里是你的简短描述应该为他人着想。
一般来说,传输文件是一个广泛的主题,从压缩、文件传输、校验和等。我们将集中讨论如何在两台计算机之间传输数据,sockets
因为我知道这是你的意图。
根据您的实施,您应该向其他用户发送文件传输请求。然后,如果接受(接受/拒绝应该是其他用户的响应),开始传输文件。在第一步中,只需发送一个描述文件传输的标头(文件名、大小等)。然后,当被接受时,您发送内容的字节流。您可以分别将文件作为字节读取open(file,'rb')
和open(file,'wb')
用于读/写。与元数据标头进行通信、检查可用性、管理余额等是一种很好的做法。
请注意,使用套接字是用于数据传输的低级接口。我不会重新发明;我会通过例子来学习。请参阅在 Python 帖子中通过 TCP 套接字发送文件,该帖子显示了传输文件的简洁代码。该帖子的答案中给出了他的问题(终止转移)的解决方案,但代码通常是可以的。在谷歌搜索上再过几分钟就会得到解释教程。
祝你申请好运!
推荐阅读
- swiftui - 如何在 swiftUI 的一侧拉伸图像,如 Android 中的 .9 文件?
- firebase - 在 null 上调用了 getter 'imgUrl'
- database - 如何使只读从属 Postgresql12 数据库可写?
- java - 如何防止Java自动舍入
- google-cloud-firestore - 使用 Firestore 数据库时,在 Play Store 上发布的应用的最佳规则是什么?
- java - java如何计算数组中的重复元素
- user-interface - 如何在 Flutter for mobile 上创建可转换的网格 UI?
- google-places-api - Google Places API _id 和 place_id 之间的区别
- c# - 转换通用类型 - 为什么使用括号“()”进行直接转换会产生编译错误,但使用“as”关键字进行转换?
- spring - Spring Boot:forward-headers-strategy 没有效果