直接上代碼
1、服務器接口
importflask,os,sys,time
fromflaskimportrequest,send_from_directory
interface_path=os.path.dirname(__file__)
sys.path.insert(0,interface_path)#將當前文件的父目錄加入臨時系統變量
server=flask.Flask(__name__)
#get方法:指定目錄下載文件
@server.route('/download',methods=['get'])
defdownload():
fpath=request.values.get('path','')#獲取文件路徑
fname=request.values.get('filename','')#獲取文件名
iffname.strip()andfpath.strip():
print(fname,fpath)
ifos.path.isfile(os.path.join(fpath,fname))andos.path.isdir(fpath):
returnsend_from_directory(fpath,fname,as_attachment=True)#返回要下載的文件內容給客戶端
else:
return'{"msg":"參數不正確"}'
else:
return'{"msg":"請輸入參數"}'
#get方法:查詢當前路徑下的所有文件
@server.route('/getfiles',methods=['get'])
defgetfiles():
fpath=request.values.get('fpath','')#獲取用戶輸入的目錄
print(fpath)
ifos.path.isdir(fpath):
filelist=os.listdir(fpath)
files=[fileforfileinfilelistifos.path.isfile(os.path.join(fpath,file))]
return'{"files":"%s"}'%files
#post方法:上傳文件的
@server.route('/upload',methods=['post'])
defupload():
fname=request.files.get('file')#獲取上傳的文件
iffname:
t=time.strftime('%Y%m%d%H%M%S')
new_fname=r'upload/'+t+fname.filename
fname.save(new_fname)#保存文件到指定路徑
return'{"code":"ok"}'
else:
return'{"msg":"請上傳文件!"}'
server.run(port=8000,debug=True)
2、客戶端請求
importrequests
importos
#上傳文件到服務器
file={'file':open('hello.txt','rb')}
r=requests.post('http://127.0.0.1:8000/upload',files=file)
print(r.text)
#查詢fpath下的所有文件
r1=requests.get('http://127.0.0.1:8000/getfiles',data={'fpath':r'download/'})
print(r1.text)
#下載服務器download目錄下的指定文件
r2=requests.get('http://127.0.0.1:8000/download',data={'filename':'hello_upload.txt','path':r'upload/'})
file=r2.text#獲取文件內容
basepath=os.path.join(os.path.dirname(__file__),r'download/')
withopen(os.path.join(basepath,'hello_download.txt'),'w',encoding='utf-8')asf:#保存文件
f.write(file)