python服务器文件上传下载+GUI【tkinter】

本文介绍使用Python和tkinter创建的一个简单GUI应用程序,该程序实现了与服务器交互进行文件上传和下载的功能。文章详细展示了代码实现过程,并提到了在处理中文文件名时遇到的编码问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python服务器文件上传下载+GUI【tkinter】

大概就是一个通过应用程序来和服务器打交道的这么一个,小东西

1.GUI

用的是tkinter

 1 # -*- coding: UTF-8 -*-
 2 from tkinter import *
 3 import tkinter.filedialog
 4 import requests
 5 
 6 
 7 def Upload():
 8     print('upload')
 9     selectFileName = tkinter.filedialog.askopenfilename(title='选择文件')#选择文件
10     
11     r = requests.post('http://127.0.0.1:8000/upload', files={'file':open(selectFileName,'rb')})
12     print(r.content.decode('utf-8'))
13     setText = r.content.decode('utf-8')
14     print(setText.__class__)
15     e1.delete(0,END)
16     e1.insert(0,setText)
17 
18 def Download():
19     link = e1.get()
20     files = requests.get(link)
21     files.raise_for_status()
22     path = tkinter.filedialog.asksaveasfilename()
23     print(files.content)
24     with open(path, 'wb') as f:
25         f.write(files.content)
26 
27 
28 root = Tk()
29 root.title('Download')
30 root.geometry('+500+300')
31 
32 e1 = Entry(root,width=50)
33 e1.grid(row=0, column=0)
34 
35 btn1 = Button(root,text=' 上传 ', command=Upload).grid(row=1, column=0,pady=5)
36 btn2 = Button(root,text=' 下载 ', command=Download).grid(row=2, column=0,pady=5)
37 btn3 = Button(root,text=' 复制 ', ).grid(row=3, column=0,pady=5)
38 
39 mainloop()

服务器对中文文件名很不友好,只要出现中文文件名,必报错,搞得我很没心情,所以Copy函数就没实现

还有,一大堆乱七八糟的编码,反正我现在也没搞明白

一会必须用bytes()转二进制码,一会又要decode又要encode,有点迷。。。

2.服务器

用的是巨简易的框架,简单的返回一两个页面就可以了,毕竟是模拟

 1 # -*- coding: UTF-8 -*-
 2 import web
 3 urls = (
 4     '/','Index',
 5     '/upload','Upload',
 6 )#路由
 7 
 8 render = web.template.render('template')
 9 
10 class Index:
11     def GET(self):#函数名时请求方式
12         return render.index()
13 
14 class Upload:
15     def POST(self):
16         info = web.input(file = {})#接收数据
17         filename = info['file'].filename
18         thisfile = info['file'].file.read()
19         with open('static/%s' %filename, 'wb') as f:
20             f.write(thisfile)
21         s = format('http://127.0.0.1:8000/static/%s' %filename)
22         return s
23 
24 
25 app = web.application(urls, globals())
26 
27 if __name__ == '__main__':#入口函数判断
28     app.run()
29 
30 #'Server.py 127.0.0.1:8000'

之前用Django写了一个简单的音乐网站,好多细节都忘了,这个用的时候感觉有点像,也算是小小地回忆了一下

总结

放假是真的无聊,想学点比较实践的知识,但发现无从下手,真的很迷茫

这回就当随便搞搞小东西,练练手了吧

中文真的不友好!!!!!!!!!!!!!!!!!!!!!!!!!!

太tm麻烦了,要不是这些个乱七八糟的编码问题,我能把花费时间缩短80%!!!

多么可怕的数字,但就是这无脑的问题,能折腾的人死去活来

哦对了requsets包里的post方法,当参数有files=的时候,这个上传的文件名不能是中文

否则服务器那别收不到参数

最后改了urllib3.py源码下的一个函数的解码方式,从‘ascll’改成了‘utf-8’,才能上传中文文件名的文件

但是,下载中文文件的时候还是会出错比如访问

http://127.0.0.1:8000/static/你好.txt的时候,服务器那边会报错“WSGI啥啥”,这个错误,baidu,google都没有,无解,放弃,心情很差

posted @ 2017-08-05 15:04 swallowblank 阅读( ...) 评论( ...) 编辑 收藏
### 如何用Python Tkinter和MySQL创建管理系统 #### 创建环境准备 为了开发基于 Python 和 MySQL 的管理系统,需安装必要的库 `mysql-connector-python` 来连接到 MySQL 数据库以及 `tkinter` 库用于图形用户界面 (GUI) 开发。 ```bash pip install mysql-connector-python ``` #### 设计数据库结构 设计合理的数据库模式对于任何信息系统至关重要。假设正在构建超市信息管理系统,则需要定义商品表、销售记录表等基本实体关系模型[^1]。 #### 连接至MySQL数据库 通过编写简单的 Python 脚本来建立与本地或远程 MySQL 服务器之间的连接: ```python import mysql.connector db = mysql.connector.connect( host="localhost", user="root", # 用户名 password="", # 密码 database="supermarket" ) cursor = db.cursor() ``` #### 构建Tkinter GUI框架 利用 Tkinter 可以快速搭建应用程序窗口,并添加按钮、输入框等各种控件来实现交互功能[^2]。 ```python from tkinter import * window = Tk() window.title('Supermarket Management System') window.geometry('500x300') label_product_id = Label(window, text='Product ID:') entry_product_id = Entry(window) button_add_item = Button(window, text='Add Item', command=lambda: add_item()) def add_item(): product_id = entry_product_id.get() cursor.execute(f"INSERT INTO products VALUES ({product_id})") db.commit() label_product_id.pack() entry_product_id.pack() button_add_item.pack() window.mainloop() ``` 此段代码展示了如何设置一个简易的产品录入界面,在点击 "Add Item" 后会执行相应的 SQL 插入语句向数据库中新增一条产品记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值