zoukankan      html  css  js  c++  java
  • 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都没有,无解,放弃,心情很差

  • 相关阅读:
    自测项目:批量删除云盘重复文件
    表格更新成本 二 问用户年龄和口令,直到他们提供有效的输入
    知乎抓取、写入文档
    倒打印心
    HDU 1102 Constructing Roads
    C++模板:字典树
    HDU 3015 Disharmony Trees
    HDU 2227 Find the nondecreasing subsequences
    HDU 3486 Interviewe
    C++模板:ST算法
  • 原文地址:https://www.cnblogs.com/liwenchi/p/7290283.html
Copyright © 2011-2022 走看看