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

代码:

#! /usr/bin/env python3
# coding:utf-8
import platformfrom werkzeug.utils import secure_filename
from flask import Flask, jsonify, request, Response
import osapp = Flask(__name__)
UPLOAD_FOLDER = 'upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.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 = r'D:/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_FOLDERif 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':passreturn 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/' + fullfilenameprint(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 = filepathwith open(store_path, 'rb') as targetfile:while 1:data = targetfile.read(1 * 1024 * 1024)  # 每次读取1Mif not data:breakyield dataresponse = 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,这里修改了地址和端口方便自己使用

调用方式:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# coding:utf-8
import requests
from 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", url=url, 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 "file=@${app_path}/${APP_NAME}.zip"  -F "ip1=${IP}" -F "ip2=${get_ip}" -F "port=${port}" -F "num=${num}"

python flask解决上传下载的问题相关推荐

  1. python实现文件上传下载

    Python实现文件上传下载 环境准备: 1. 实验分两个文件,服务端(linux)和客户端(windows). 服务端运行环境:python2.x 客户端运行环境:python3.x 2. 使用了库 ...

  2. Ajax+Python flask实现上传文件功能

    HTML: <div ><input type="file" name="FileUpload" id="FileUpload&qu ...

  3. python 实现FTP上传下载文件

    2021.1.8更新 下面的方法在传输速率有差异的情况下,会出现丢包的情况,导致数据不完整,现在用另一种更为简单的方式,能保证数据的正确性 def ftp(file_name, data_path): ...

  4. python实现文件下载-python实现文件上传下载

    创建自己的ftp类 myftp.py 废话不多说,前方上代码!!! #!/usr/bin/python #coding:utf-8 #author:zhj #info:数据传输平台 import ft ...

  5. Python socket文件上传下载

    python网络编程 程序的目录结构 socketDemo ├── client │ ├── cli.py │ └── local_dir │ └── lianxijiangjie.mp4 └── s ...

  6. python解析xml提交到hdfs_完美解决python针对hdfs上传和下载的问题

    当我们使用python的hdfs包进行上传和下载文件的时候,总会出现如下问题 requests.packages.urllib3.exceptions.NewConnectionError:: Fai ...

  7. Python + Paramiko实现sftp文件上传下载

    最近在测试服务器那块,看了下Paramiko模块,一直都是用FileZilla工具,想了想,持续集成,更新代码可以用Parmmiko完成,还是不错的 Paramiko是用python语言写的一个模块, ...

  8. python下载文件传到服务器_windows上python上传下载文件到linux服务器指定路径【转】...

    从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...

  9. 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:宇的季节 cnblogs.com/chenkeyu/p/80 ...

最新文章

  1. ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`meiduo`.`
  2. C#实现对Word文件读写[转]
  3. rm 空间不释放_面试官跟我说rm删除文件之后,空间就被释放了吗?我该怎么答...
  4. python-mysql
  5. Python获取当前目录下所有文件的绝对路径并存储在文件中
  6. android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度
  7. jmeter php网站,jmeter实战之phpwind随机回帖/发帖
  8. 2022年中国母婴新消费白皮书
  9. Unity StartCoroutine 和 yield return 深入研究
  10. Python学习笔记之函数(三)
  11. 为什么要用maven - 1
  12. 【实用】Putty常见错误汇总
  13. 如何化身BAT面试收割机?不愧是大佬
  14. 5款Mac必备的Safari扩展
  15. android toast显示在中间,android Toast 弹出在屏幕中间位置以及自定义Toast
  16. C语言 百钱百鸡问题
  17. Django 指定目录创建app
  18. VR虚拟3d展示线上引流好帮手
  19. STM32 PWM的理解
  20. 央视揭秘网络推广:水军横行 想让你红你就红

热门文章

  1. 【USACO 3.1】Contact(01子串按出现次数排序)
  2. (转)青春有限,走红有年
  3. 全面降低windows系统的安全隐患 (四)
  4. java反射实例_关于java反射的一个案例
  5. 5怎么关闭作弊模式_相机5种主要的拍摄模式该怎么用
  6. 【概念】虚拟利润中心初识
  7. LSMW批处理使用方法(10)_步骤12、13
  8. LSMW批处理使用方法(06)_步骤4、5
  9. Mass对象类型介绍
  10. table_line