server.py
from flask import *
app=Flask(__name__)
@app.route('/upload',methods=["POST"])
def uploadFile():
msg=""
try:
if "fileName" in request.values:#如果服务器收到传值信息
fileName=request.values.get("fileName")
data=request.get_data()
fobj=open("upload"+fileName,"wb")
fobj.write(data)#写入传值的文档内容
fobj.close()
msg="OK"
else:
msg="没有按要求上传文件"
except Exception as err:
print(err)
msg=str(err)
return msg
if __name__=="__main__":
app.run(port=5000,debug=True)
client.py
import urllib.request
import urllib.parse
import os
url="http://127.0.0.1:5000/upload"
fileName=input("Enter the file:")
if os.path.exists(fileName):#如果输入的文件是存在的情况下
fobj=open(fileName,"rb")#因为文件是存在的所以我们直接打开文件
data=fobj.read()#读取文件中的资料
fobj.close()#关闭文件
'''找到文件的文本结尾
p=fileName.rfind("\\")
fileName=fileName[p+1:]
'''
p=fileName.rfind("\\")
fileName=fileName[p+1:]
print("准备上传:"+fileName)
'''
客户端要上传二进制数据,要设置表头content-type
headers={'content-type':'application/octet-stream'}
'''
headers = {'content-type': 'application/octet-stream'}
purl=url+"?fileName="+urllib.parse.quote(fileName)#把文件上传给服务器url+文件名。
'''
urllib.request.Request()三个参数重点
地址,上传的文件内容,头
'''
req=urllib.request.Request(purl,data,headers)
msg=urllib.request.urlopen(req)
msg=msg.read().decode()#读取返回值并decode()解码
if msg=="OK":#表示上传成功
print("成功上传:",len(data),"字节")
else:
print(msg)
else:
print("文件不存在")