加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python flask解决上传下载的问题

发布时间:2020-12-20 12:44:31 所属栏目:Python 来源:网络整理
导读:记录瞬间 ? 最近为了解决一些新的需求,简单介入了flask对文件的上传和下载的方法,并分别使用python和curl模拟发送 ? 代码: # ! /usr/bin/env python3 # coding:utf-8 import platform from werkzeug.utils import secure_filename from flask import Flas

  记录瞬间

?

最近为了解决一些新的需求,简单介入了flask对文件的上传和下载的方法,并分别使用python和curl模拟发送

?

代码:

#! /usr/bin/env python3
# coding:utf-8
import platform

from werkzeug.utils import secure_filename
from flask import Flask,jsonify,request,Response
import os

app = Flask(__name__)
UPLOAD_FOLDER = upload
app.config[UPLOAD_FOLDER] = UPLOAD_FOLDER
app.config[MAX_CONTENT_LENGTH] = 20 * 1024 * 1024   # 定义最大上传文件大小为:20M

ALLOWED_EXTENSIONS = set([txt,png,jpg,xls,JPG,PNG,zip,gif,GIF])
run_path = "./"                         # 根据不同的操作系统,定义基础运行路径
if platform.system() == "Linux":
    run_path = r/opt/AutoUpload/
if platform.system() == "Windows":
    run_path = rD:/PythonWorkSpace/
msg = niGEin!


# 用于判断文件后缀
def allowed_file(filename):
    return . in filename and filename.rsplit(.,1)[1] in ALLOWED_EXTENSIONS


# 上传文件-upload-file
@app.route(/uf,methods=[POST],strict_slashes=False)
def api_upload():
    file_dir = run_path + UPLOAD_FOLDER
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)
    f = request.files[file]                             # 获取上传文件

    print(request.values.get("filePath"))
    

    fname = secure_filename(f.filename)
    ext = fname.rsplit(.,1)[1]                          # 获取文件后缀

    f.save(os.path.join(file_dir,fname))                  # 保存文件到upload目录
    if ext == zip:
        pass
    return jsonify({"errno": "000000","errmsg": u"success"})


# 下载文件-download-file
@app.route(/df,methods=[GET,POST])
def api_download():
    if request.method == GET:
        fullfilename = request.json[fileName]
        print(fullfilename)
    filepath = run_path + tools/ + fullfilename
    print(filepath)
    if not os.path.isfile(filepath):
        print("nononononono!!!")
        return
    # 普通下载
    # response = make_response(send_from_directory(filepath,fullfilename,as_attachment=True))
    # response.headers["Content-Disposition"] = "attachment; filename={}".format(filepath.encode().decode(‘latin-1‘))
    # return response

    # 流式读取
    def send_file():
        store_path = filepath
        with open(store_path,rb) as targetfile:
            while 1:
                data = targetfile.read(1 * 1024 * 1024)  # 每次读取1M
                if not data:
                    break
                yield data

    response = Response(send_file(),content_type=application/octet-stream)
    response.headers["Content-disposition"] = attachment; filename=%s % fullfilename 
    return response


if __name__ == __main__:
    app.run(debug=True,port=5002,host=0.0.0.0)
    # 默认127.0.0.1:5000,这里修改了地址和端口方便自己使用

?

调用方式:

# coding:utf-8
import requests
from urllib3 import encode_multipart_formdata


url = "http://localhost:5002/up"
data = {
            "filePath": "123123123"
        }
header = {}
data[file] = ("xx.zip",open(r"./basedir/xx.zip",rb).read())
encode_data = encode_multipart_formdata(data)
data = encode_data[0]
header[Content-Type] = encode_data[1]
try:
    result = requests.request(method=POST,url=url,headers=header,data=data,timeout=(3,100))

    if "true" in result.text:
        analyse_json = result.json()
        print("向服务器发送文件并解压成功")
        result_path = analyse_json["data"]
        print("服务器端的地址为 {}".format(result_path))
    else:
        print("向服务器发送文件并解压Failed {}".format(result.text))
except Exception as e:
    print("执行发送数据失败.{}".format(e))



#--------------------------------------------

url = "http://localhost:5002/df"
data = {
            "fileName": "xx.jar"
        }

result = requests.request(method="GET",json=data,stream=True)
f = open(data[fileName],"wb")
for chunk in result.iter_content(chunk_size=512):
    if chunk:
        f.write(chunk)

#---------------------------------------------

?

使用curl命令进行发送文件的方式:

?

curl ${URL} -X POST -F "[email?protected]${app_path}/${APP_NAME}.zip"  -F "ip1=${IP}" -F "ip2=${get_ip}" -F "port=${port}" -F "num=${num}"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读