当前位置: 首页 > news >正文

详细分析python下载文件的两种方式(附Demo)

目录

  • 前言
  • 1. 接口方式
  • 2. Nginx

前言

基本项目的构建推荐阅读:构建Flask前后端不分离项目(附Python Demo)

对于Java的基本知识,推荐阅读:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. 【Java项目】实战CRUD的功能整理(持续更新)

1. 接口方式

对于flask1.0的版本可以使用如下方式(通过接口)

from flask import Flask, send_file, abortapp = Flask(__name__)@app.route('/download/<filename>')
def download_file(filename):try:# 文件路径file_path = f'/path/to/your/files/{filename}'# 确保文件存在if not os.path.isfile(file_path):abort(404)  # 文件不存在,返回 404 错误# 发送文件return send_file(file_path, as_attachment=True, attachment_filename=filename)except Exception as e:# 捕获异常并返回 500 错误return str(e), 500if __name__ == '__main__':app.run(debug=True)

以上只是作为展示

如果是前后进行交互,基本的Demo如下:(flask2.0版本)

from flask import Blueprint, render_template, send_filebp = Blueprint('main', __name__)@bp.route('/')
def index():return render_template('index.html')@bp.route('/download')
def download():# 假设压缩包文件路径为 '/path/to/your/file.zip'file_path = '/root/xx.rar'return send_file(file_path, as_attachment=True, download_name='xx.rar')

对于前端的按钮配置如下:

<button onclick="downloadFile()">下载压缩包</button> <!-- 新增的下载按钮 -->

后续只需要把对应文件放置在相应位置即可

截图如下:

在这里插入图片描述

2. Nginx

对于Nginx的详细说明,更多的了解,推荐阅读:

  1. Nginx从入门到精通(全)
  2. Nginx配置静态网页访问(图文界面)
  3. Nginx将https重定向为http进行访问的配置(附Demo)

总体配置如下:

server {listen 80;server_name ip地址;location / {proxy_pass http://127.0.0.1:5000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}location /downloads/ {alias /path/to/your/files/;autoindex on; # 可选:启用目录索引}
}

前端的ip地址只需要走对应的链接即可

<a href="https://ip/downloads/光纤配置表生成.rar" download>下载压缩包</a>

这种方式适合内网,如果外网需要配置相应的域名证书之类的

在服务器上安装 Certbot 工具,以便为域名申请 SSL 证书:

sudo apt update
sudo apt install certbot python3-certbot-nginx

获取证书
使用 Certbot 获取并安装 SSL 证书:

sudo certbot --nginx -d your_domain

将 your_domain 替换为域名。如果使用的是 IP 地址而不是域名,可能需要设置一个有效的域名

配置 Nginx 使用 HTTPS,Certbot 会自动配置 Nginx 来使用 HTTPS
如果需要手动配置,请确保Nginx 配置文件如下所示:

server {listen 80;server_name ip地址;location / {proxy_pass http://127.0.0.1:5000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}location /downloads/ {alias /root/;autoindex on; # 启用目录索引(可选)}# Redirect HTTP to HTTPSlocation / {return 301 https://$host$request_uri;}
}server {listen 443 ssl;server_name ip地址;ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;location / {proxy_pass http://127.0.0.1:5000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}location /downloads/ {alias /root/;autoindex on; # 启用目录索引(可选)}
}

请确保替换 /etc/letsencrypt/live/your_domain/fullchain.pem 和 /etc/letsencrypt/live/your_domain/privkey.pem 路径为 Certbot 创建的证书路径

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SonarQube详细说明: 为Kotlin项目保驾护航
  • 【数值计算方法】23维高斯积分的python实现
  • git revert和git reset工作中使用
  • Prometheus 常见参数
  • 【自学深度学习梳理3】卷积神经网络
  • 【链表OJ】常见面试题 3
  • Linux kill命令给进程发信号
  • 寻找二叉树中两个节点的最低公共祖先
  • 2024小学生古诗文大会暑期备考:吃透历年真题和知识点(持续)
  • 简单的docker学习 第1章 docker 概述
  • springcloud loadbalancer nacos无损发布
  • 【数据结构】线段树
  • 临床数据科学中如何用R来进行缺失值的处理(上)
  • 24/8/6算法笔记 不同核函数
  • 读友好的缓存淘汰算法
  • [case10]使用RSQL实现端到端的动态查询
  • Android交互
  • Angular 4.x 动态创建组件
  • docker python 配置
  • IP路由与转发
  • select2 取值 遍历 设置默认值
  • spring + angular 实现导出excel
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 当SetTimeout遇到了字符串
  • 看域名解析域名安全对SEO的影响
  • 盘点那些不知名却常用的 Git 操作
  • 批量截取pdf文件
  • 网页视频流m3u8/ts视频下载
  • 微信小程序开发问题汇总
  • 用 Swift 编写面向协议的视图
  • 进程与线程(三)——进程/线程间通信
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $.proxy和$.extend
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (52)只出现一次的数字III
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (WSI分类)WSI分类文献小综述 2024
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm失物招领系统 毕业设计 182317
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .form文件_SSM框架文件上传篇
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net8.0与halcon编程环境构建
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .NET未来路在何方?
  • .vimrc 配置项
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [Bugku] web-CTF靶场系列系列详解⑥!!!
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [Cloud Networking] Layer3 (Continue)
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件
  • [java/jdbc]插入数据时获取自增长主键的值