You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask应用zip文件设置htpasswd保护及过期文件清理相关问题咨询

Flask应用结果文件加密、邮件发送与过期清理解决方案

1. 为zip文件配置htpasswd访问保护

htpasswd是HTTP基础认证的账户密码存储方案,不需要对单个zip单独加密,对存储zip的文件夹统一做访问控制即可,两种常用实现路径:

  • 生产环境推荐用Nginx/Apache反向代理层配置:
    • 首先执行命令生成密码文件:htpasswd -c /<自定义存储路径>/.htpasswd <任务专属用户名>,按提示输入对应密码即可,可按需为每个任务生成独立的认证信息
    • Nginx站点配置中添加如下规则,实现静态文件访问拦截:
      location /download-zip/ {
          auth_basic "请输入访问凭证";
          auth_basic_user_file /<自定义存储路径>/.htpasswd;
          alias /flask应用根目录/zip存储文件夹/;
      }
      
  • 不想修改服务端配置的话,可直接在Flask层实现兼容htpasswd的认证:安装flask-httpauth扩展,给下载路由加基础认证校验,用户名密码可存在数据库或本地临时文件中,效果和服务层配置完全一致。

2. 用flask-mail发送下载通知邮件

  • 先安装依赖:pip install flask-mail
  • 初始化flask-mail示例:
from flask_mail import Mail, Message

app.config.update(
    MAIL_SERVER = 'smtp.你的邮箱服务商域名',
    MAIL_PORT = 465,
    MAIL_USE_SSL = True,
    MAIL_USERNAME = '你的发件邮箱地址',
    MAIL_PASSWORD = '你的邮箱授权码'
)
mail = Mail(app)
  • 发送通知逻辑:生成zip文件时将对应的下载链接、认证用户名、密码和任务绑定存入数据库,发送时直接取出拼接邮件内容即可:
def send_download_notice(user_email, download_url, auth_user, auth_pwd):
    msg = Message(
        subject = '任务处理完成,结果可下载',
        sender = app.config['MAIL_USERNAME'],
        recipients = [user_email]
    )
    msg.body = f"""
    你的任务已处理完成,下载信息如下:
    下载地址:{download_url}
    访问用户名:{auth_user}
    访问密码:{auth_pwd}
    链接将在N周后自动失效,请及时保存文件。
    """
    mail.send(msg)

3. 过期zip文件清理逻辑

你提出的「新任务提交时批量清理过期文件」的方案是可行的,实现成本很低:

  • 存储zip文件时,建议将创建时间编码到文件名(如result_<任务ID>_<13位时间戳>.zip),或者在数据库中记录每个zip的存储路径、创建时间、过期时间
  • 每次新任务提交触发时,遍历zip存储文件夹或者查询数据库中的任务列表,筛选出创建时间超过设定阈值(比如2周)的文件,调用os.remove(文件路径)删除即可,同步将对应任务标记为已过期
  • 如果担心任务提交频率低导致清理不及时,可引入APScheduler设置定时任务,每周固定时间执行一次全量清理,不依赖任务提交触发。

内容的提问来源于stack exchange,提问作者honeymoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:45:05