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后端处理:
-
获取OSS视频链接: 通过阿里云SDK获取OSS视频文件的URL。
-
构造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
-
前端调用: 前端通过AJAX或其他方式调用Django视图函数,触发下载。
通过以上步骤,即可实现用户点击按钮直接下载阿里云OSS存储的视频文件,无需修改OSS控制台的HTTP头设置,更方便高效。 请注意根据实际情况替换代码中的占位符,并安装必要的阿里云SDK。