标签导航:

django项目中如何实现阿里云oss视频文件的直接下载?

Django项目中阿里云OSS视频文件的直接下载

在Django项目中使用阿里云OSS存储视频文件时,直接返回OSS链接会导致浏览器在线播放而非下载。本文提供一种解决方案,实现用户点击按钮直接下载OSS视频。

问题在于浏览器对HTTP响应头的解析。OSS存储的是视频文件地址(例如:oss.hanzhou.com/mp4/JDUkd63h.mp4),直接返回此地址,浏览器会根据文件类型进行处理,例如MP4文件会被自动播放。

解决方法是修改HTTP响应头,将Content-Type属性设置为application/octet-stream。这是一个通用的二进制数据类型,指示浏览器下载文件而非在线播放。 浏览器识别到application/octet-stream后,会弹出下载对话框。

实现步骤:

虽然文中提到修改OSS控制台的HTTP头,但这并非最佳方案,因为需要逐个文件修改。更推荐的做法是在Django后端处理:

  1. 获取OSS视频链接: 通过阿里云SDK获取OSS视频文件的URL。

  2. 构造HTTP响应: Django视图函数中,使用HttpResponse对象,设置Content-Type为application/octet-stream,并设置Content-Disposition头,指定文件名和强制下载:

    from django.http import HttpResponse
    from aliyunsdkcore.client import AcsClient # 或者其他阿里云SDK
    
    def download_video(request, video_name):
        # ... 使用阿里云SDK获取视频文件的URL ...
        video_url = get_video_url_from_oss(video_name)
    
        response = HttpResponse(content_type='application/octet-stream')
        response['Content-Disposition'] = f'attachment; filename="{video_name}"'
        # ...  此处可能需要根据实际情况添加其他响应头,例如Content-Length ...
        return response
  3. 前端调用: 前端通过AJAX或其他方式调用Django视图函数,触发下载。

通过以上步骤,即可实现用户点击按钮直接下载阿里云OSS存储的视频文件,无需修改OSS控制台的HTTP头设置,更方便高效。 请注意根据实际情况替换代码中的占位符,并安装必要的阿里云SDK。