python-上傳下載文件


一、服務端接口

import flask, os,sys,time
from flask import request, 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'])
def download():
    fpath = request.values.get('path', '') #獲取文件路徑
    fname = request.values.get('filename', '')  #獲取文件名
    if fname.strip() and fpath.strip():
        print(fname, fpath)
        if os.path.isfile(os.path.join(fpath,fname)) and os.path.isdir(fpath):
            return send_from_directory(fpath, fname, as_attachment=True) #返回要下載的文件內容給客戶端
        else:
            return '{"msg":"參數不正確"}'
    else:
        return '{"msg":"請輸入參數"}'


# get方法:查詢當前路徑下的所有文件
@server.route('/getfiles', methods=['get'])
def getfiles():
    fpath = request.values.get('fpath', '') #獲取用戶輸入的目錄
    print(fpath)
    if os.path.isdir(fpath):
        filelist = os.listdir(fpath)
        files = [file for file in filelist if os.path.isfile(os.path.join(fpath, file))]
    return '{"files":"%s"}' % files


# post方法:上傳文件的
@server.route('/upload', methods=['post'])
def upload():
    fname = request.files.get('file')  #獲取上傳的文件
    if fname:
        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)

 

二、客戶端發送請求

import requests
import os


#上傳文件到服務器
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/')
with open(os.path.join(basepath, 'hello_download.txt'),'w',encoding='utf-8') as f: #保存文件
    f.write(file)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM