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/

相关文章:

Android:与其他应用程序共享数据的存储位置?

python - KeyError : 'url_encoded_fmt_stream_map'

python - memcached/Couchbase 中的 Flask session ;他们安全吗?

javascript - 没有收到任何错误,但页面未在我的 Flask 应用程序中使用 render_template 进行渲染

python - 未绑定(bind)本地错误 : local variable 'cursor' referenced before assignment

python-3.x - 使用 pytube 下载 mp3 格式的视频

urllib2 - 使用 Pytube : signature = cipher. get_signature(js, stream ['s' ]) 出现错误 KeyError: 's'

python - 在 HTML Flask 中显示 ImageField

java - Android HTC/Sony 外部存储权限被拒绝

swift - 您需要帮助在连接到步进器的标签中存储数字