python flask解决上传下载的问题

python flask解决上传下载的问题,第1张

概述  记录瞬间   最近为了解决一些新的需求,简单介入了flask对文件的上传和下载的方法,并分别使用python和curl模拟发送   代码: #! /usr/bin/env python3# coding:utf-8import platformfrom werkzeug.utils import secure_filenamefrom flask import Flask,

  记录瞬间

 

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

 

代码:

#! /usr/bin/env python3# Coding:utf-8import platformfrom werkzeug.utils import secure_filenamefrom flask import Flask,Jsonify,request,Responseimport osapp = Flask(__name__)UPLOAD_FolDER = uploadapp.config[UPLOAD_FolDER] = UPLOAD_FolDERapp.config[MAX_CONTENT_LENGTH] = 20 * 1024 * 1024   # 定义最大上传文件大小为:20MALLOWED_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 responseif __name__ == __main__:    app.run(deBUG=True,port=5002,host=0.0.0.0)    # 默认127.0.0.1:5000,这里修改了地址和端口方便自己使用

 

调用方式:

# Coding:utf-8import requestsfrom urllib3 import encode_multipart_formdataurl = "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}"
总结

以上是内存溢出为你收集整理的python flask解决上传下载的问题全部内容,希望文章能够帮你解决python flask解决上传下载的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1195329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存