flask - 下载文件而不存储它

标签 flask storage pytube storing-data

我正在使用 PyTube 和 Flask 构建一个 Youtube 视频下载器。我想做的是,最终用户收到视频文件,但我从不将其存储到服务器中。

目前代码如下所示:

def download_video():
if request.method == "POST":
    url = YouTube(session['link']) # Getting user input
    itag = request.form.get("itag") # Getting user input
    video = url.streams.get_by_itag(itag) 
    file = video.download(path) # Downloading the video into a folder
    return send_file(file, as_attachment=True) 
return redirect(url_for("home"))

代码工作正常,唯一的缺点是它存储在服务器中,稍后可能会成为问题。

我已经尝试将它下载到 /dev/null/,这在本地似乎可以正常工作,但是当部署到 Heroku 时却出现了一个内部服务器错误

非常感谢任何输入。谢谢!

最佳答案

download 方法用于:

Write the media stream to disk.

一个肮脏的解决方法当然是在调用 download 后删除保存在 output_path 的文件,但您也可以使用 stream_to_buffer 将媒体流写入缓冲区,并且发送那个。

最小且可重现的示例

from pytube import YouTube
from flask import Flask, send_file
from io import BytesIO

app = Flask(__name__)


@app.route("/")
def index():
    buffer = BytesIO()
    url = YouTube("https://www.youtube.com/watch?v=dQw4w9WgXcQ")
    video = url.streams.get_by_itag(18)
    video.stream_to_buffer(buffer)
    buffer.seek(0)

    return send_file(
        buffer,
        as_attachment=True,
        attachment_filename="cool-video.mp4",
        mimetype="video/mp4",
    )


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

关于flask - 下载文件而不存储它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68149318/

相关文章:

python - 根目录下静态站点的 Nginx 配置,子目录下的 Flask 应用

python - 如何在 flask-SQLAlchemy 中使用 Default 和 Onupdate 等值

python - 使用 Pytest 测试 Flask session

python - 属性错误 : 'YouTube' object has no attribute 'get_videos'

python-3.x - 如何在 pytube 中使用进度条?

javascript - 如何将 slider 值从 jQuery 或 javascript 发送到 python Flask?

android - 为什么我的存储空间不断填满?

storage - Ceph 对象存储 (RADOS) 中对象的最佳大小

database - Azure 上的游戏记分牌

python - 在 pytube 中显示进度