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

Heroku部署Flask应用:文件下载存储位置及低成本方案咨询

关于Heroku上Flask应用的文件存储问题

嘿,我来帮你搞定这个问题!首先得先明确Heroku的核心特性:它的文件系统是临时且短暂的——每次你的dyno重启(比如部署更新、自动休眠唤醒、资源调整),所有本地存储的文件都会被清空,回到你部署时的初始状态。所以哪怕你找到存储位置,也没法长期保留文件哦。

先回答你最关心的:文件存在哪?

  • 在本地运行时,文件存在app.py所在的目录,在Heroku上也是一样的——默认工作目录就是你的应用根目录,和app.py同层级。你可以在代码里加一行print(os.getcwd()),部署后查看Heroku日志就能确认具体路径。不过还是那句话,这个目录里的文件没法持久化。

既然你不想用S3(毕竟文件很小,没必要付费),给你两个更合适的方案:

方案1:直接把文件返回给用户,不存到服务器

既然你下载文件是为了给用户用,完全可以跳过本地存储这一步,直接把下载到的内容作为Flask响应返回给用户,这样既省了存储,又避免了临时文件的问题。修改后的代码如下:

import requests
from flask import Flask, make_response

app = Flask(__name__)

@app.route('/')
def hello():
    return '<h1>Hello World!</h1>'

@app.route('/download')
def download():
    download_url = "https://www.python.org/static/community_logos/python-logo-master-v3-TM.png"
    r = requests.get(download_url)
    # 构造响应,设置正确的headers让浏览器识别为下载文件
    response = make_response(r.content)
    response.headers['Content-Type'] = 'image/png'
    response.headers['Content-Disposition'] = 'attachment; filename=python_logo.png'
    return response

if __name__ == "__main__":
    app.run()

这样用户访问/download时,浏览器会直接触发文件下载,根本不用在服务器上存文件,完美解决你的需求。

方案2:临时存储(仅限短期使用)

如果你确实需要在服务器上临时存一下文件(比如要做一些简单处理再用),可以用Heroku提供的/tmp目录,这是官方推荐的临时存储路径,空间限制是每个dyno512MB,足够存你的小文件。修改代码如下:

import requests
import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return '<h1>Hello World!</h1>'

@app.route('/download')
def download():
    download_url = "https://www.python.org/static/community_logos/python-logo-master-v3-TM.png"
    # 用/tmp目录存储文件
    save_path = os.path.join('/tmp', 'python_logo.png')
    r = requests.get(download_url)
    with open(save_path,'wb') as f:
        f.write(r.content)
    # 这里可以加后续处理逻辑
    return "<h2>Download Complete<h2>"

if __name__ == "__main__":
    app.run()

但一定要记住:/tmp里的文件也会在dyno重启后消失,只能用来做短期临时处理,不能长期保存。

最后再强调一遍:Heroku的本地存储不适合持久化保存文件,你的小文件场景用方案1是最优解,既简单又不用操心存储问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:32:31