【问题标题】:Download a file without storing it下载文件而不存储它
【发布时间】:2021-09-09 22:18:50
【问题描述】:

我正在使用PyTube and 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 时,我会得到一个 Internal Server Error

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

【问题讨论】:

    标签: flask storage pytube storing-data


    【解决方案1】:

    download 方法用于:

    将媒体流写入磁盘。

    一种肮脏的解决方法当然是在调用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()
    

    【讨论】:

    • 感谢您的精彩解释!这正是我想要的!现在一切正常!
    猜你喜欢
    • 2020-03-17
    • 2020-01-31
    • 2021-10-20
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多