使用 Flask 在 Heroku 上生成文件并提供下载链接

DDD
发布: 2025-10-06 14:16:01
原创
645人浏览过

使用 flask 在 heroku 上生成文件并提供下载链接

本文档介绍了如何在 Heroku 平台上,利用 Python Flask 框架动态生成文件,并通过前端 JavaScript 代码提供下载链接。重点讲解了后端文件生成、数据传递以及前端 Blob 对象的使用,帮助开发者实现动态文件下载功能。由于 Heroku 的 Dyno 会在重启后清除文件系统,因此本文提供的方案主要适用于临时文件的生成和下载。

后端 Flask 代码实现

首先,我们需要创建一个 Flask 应用,并定义一个路由来处理文件生成和数据返回的请求。以下是一个示例:

from flask import Flask, request, json

app = Flask(__name__)

@app.route("/test", methods=['GET', 'POST'])
def test():
    if request.method == "POST":
        # 创建文件
        f = open("myfile.txt", "w")
        f.write("content")
        f.close()

        # 读取文件内容
        f = open("myfile.txt", 'r')
        file_content = f.read()
        f.close()

        # 返回 JSON 数据,包含文件内容
        return json.dumps({'success': True, 'data': file_content}), 200, {'ContentType': 'application/json'}

if __name__ == '__main__':
    app.run(debug=True)
登录后复制

这段代码首先定义了一个 /test 路由,该路由只接受 POST 请求。当收到请求时,它会创建一个名为 myfile.txt 的文件,并写入 "content" 内容。然后,它读取该文件的内容,并将内容封装在 JSON 数据中返回给前端。

注意事项:

  • 由于 Heroku 的文件系统是临时的,每次 Dyno 重启后都会被清除,因此不适合存储持久性数据。
  • 在生产环境中,应该考虑使用云存储服务(如 AWS S3、Google Cloud Storage 等)来存储文件。
  • 在读取文件后,务必使用 f.close() 关闭文件,释放资源。

前端 JavaScript 代码实现

接下来,我们需要使用 JavaScript 代码来发送 POST 请求到后端,并处理返回的数据,生成下载链接。以下是一个示例:

宜乐创意礼品店系统
宜乐创意礼品店系统

宜乐创意礼品定制系统是宜乐针对自助定制个性礼品的需求,历时3年开发出的一套diy系统。借助这套系统,顾客无需客服人员的协助,可以简单而轻松的设计一份属于自己个性礼品。宜乐创意礼品系统网店 v1.0则是在功能强大的Magento基础上,集成宜乐礼品定制系统,专门为礼品提供商或卖家开发的一套独立的网店系统。简单来说,本软件是提供给卖家使用的网店系统,同时集成国内最先进的定制功能。 你只要下载并简单的安

宜乐创意礼品店系统 0
查看详情 宜乐创意礼品店系统
$.ajax('/test', {
    type: 'POST',
    data: { myData: product}, // 可选:发送一些数据到后端
    dataType: 'json',
    success: function(data, status, xhr) {
        console.log('response');
        console.log(data);
        console.log(data['success']);

        // 创建 Blob 对象
        var blob=new Blob([data['data']], {type: "text/plain"});

        // 创建下载链接
        var link=document.createElement('a');
        link.href=window.URL.createObjectURL(blob);
        link.download="myfile.txt";

        // 触发下载
        link.click();
    },
    error: function (jqXhr, testStatus, errorMessage) {
        console.log("error");
    }
});
登录后复制

这段代码使用 jQuery 的 $.ajax 函数发送一个 POST 请求到 /test 路由。在 success 回调函数中,它首先从返回的 JSON 数据中获取文件内容。然后,它使用 Blob 对象将文件内容转换为一个二进制对象,并指定 MIME 类型为 text/plain。接下来,它创建一个 <a> 元素,设置 href 属性为 Blob 对象的 URL,并设置 download 属性为文件名 myfile.txt。最后,它触发 <a> 元素的 click 事件,从而启动下载。

注意事项:

  • 需要引入 jQuery 库。
  • Blob 对象允许你在客户端创建类似于文件的对象,无需将文件上传到服务器。
  • window.URL.createObjectURL 方法创建一个指向 Blob 对象的临时 URL。
  • link.download 属性指定下载文件的名称。

总结

通过结合 Flask 后端和 JavaScript 前端,我们可以在 Heroku 平台上实现动态文件生成和下载的功能。这种方法适用于生成临时文件,并提供给用户下载。如果需要存储持久性数据,应该考虑使用云存储服务。此外,需要注意资源释放,以及处理错误情况。

以上就是使用 Flask 在 Heroku 上生成文件并提供下载链接的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号