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

Django中如何将youtube-dl输出直接返回浏览器无需服务器磁盘存储

实现方案

你可以通过 subprocess.Popen 启动 youtube-dl 子进程捕获标准输出流,再配合 Django 的 StreamingHttpResponse 直接将流返回给客户端,全程不会在服务器磁盘写入任何文件,参考代码如下:

首先导入依赖模块:

from django.http import StreamingHttpResponse
import subprocess

编写下载视图逻辑:

def download_twitch_clip(request, pk):
    # 构造 youtube-dl 执行命令
    ydl_cmd = [
        "youtube-dl",
        "-o", "-", # 指定输出到标准输出
        "--quiet", # 关闭运行日志输出,避免污染视频流
        f"https://clips.twitch.tv/{pk}"
    ]

    # 启动子进程,捕获标准输出,忽略错误输出
    ydl_process = subprocess.Popen(
        ydl_cmd,
        stdout=subprocess.PIPE,
        stderr=subprocess.DEVNULL
    )

    # 构造流式响应,按块读取子进程输出
    response = StreamingHttpResponse(
        iter(lambda: ydl_process.stdout.read(4096), b""),
        content_type="video/mp4"
    )
    # 配置响应头触发浏览器下载,自定义保存文件名
    response["Content-Disposition"] = f"attachment; filename=twitch_clip_{pk}.mp4"
    return response

注意事项

  • 请确保服务器运行环境已安装 youtube-dl,且 Django 进程有对应执行权限
  • 若需要指定视频清晰度,可以先调用 youtube-dl 格式查询接口获取对应格式编码,在命令中添加 -f 格式编码 参数即可,同时可根据实际格式调整 content_type 取值
  • 应对大文件下载场景时,建议调整服务器反向代理、Django 进程的超时阈值,避免下载中途断连
  • 可在响应结束逻辑中添加进程资源回收逻辑,调用 ydl_process.wait() 避免产生孤儿进程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:54:04