最近想做一个视频网站,已经在阿里云上面申请了一个bucket,但是我就依靠这个标签进行访问的时候,是直接下载视频而不是浏览视频,以至于我专门去看了阿里云的开发文档,找了好久好久终于找到了解决办法。
步骤一
修改视频存储时候的header请求头,这里例如我使用的框架是django
from django.shortcuts import render
from .forms import LessonPlanForm
from .models import video
import oss2
# Create your views here.
def submit(request):
if request.method == 'POST':
form = LessonPlanForm(request.POST, request.FILES)
print(form.errors)
if form.is_valid():
#阿里云参数设置
ALIYUN_ACCESS_KEY_ID = 'oss对应的id'
ALIYUN_ACCESS_KEY_SECRET = 'oss对应的密码'
ALIYUN_OSS_BUCKET_NAME = 'bucket名字'
ALIYUN_OSS_ENDPOINT = 'endpoint(我的是:oss-cn-hangzhou.aliyuncs.com)'
# 生成访问凭证
auth = oss2.Auth(ALIYUN_ACCESS_KEY_ID,ALIYUN_ACCESS_KEY_SECRET) # Replace with your own access key and secret
bucket = oss2.Bucket(auth, ALIYUN_OSS_ENDPOINT, ALIYUN_OSS_BUCKET_NAME) # Replace with your own endpoint and bucket name
#从models层获取模型,实例化,把可访问的url存到数据库(目的)
newVideo = video()
# 获取到的前端的文件
Video_file = form.cleaned_data['video']
# 上传到OSS的根目录下的video_file文件夹,同时返回一个可以访问视频的链接(即放上链接就可以看)
Video_fileUrl = f'https://{ALIYUN_OSS_BUCKET_NAME}.{ALIYUN_OSS_ENDPOINT}/video_file/{Video_file.name}'
bucket.put_object(f'video_file/{Video_file.name}',Video_file,headers={'Content-Disposition':'inline'})
newVideo.Video_file = Video_fileUrl
# 保存数据、文件等操作
newVideo.save()
return render(request, 'submit.html')
else:
form = LessonPlanForm()
return render(request, 'submit.html', {'form': form})
这里看到bucket.put_object的header我们对他的设置,设置为inline,这样我们才可以观看视频而不是下载,
步骤二
我们这里发现即使我在这里设置了inline,但是通过链接任然无法访问,我在这里又卡了一下,于是我就去看了看开发文档,终于找到了问题,原因是在阿里云oss服务上面存储视频的时候,阿里云会自动为你把content-dispositon设置为哦attachment,而如果在bucket没有绑定域名的情况下无法进行修改content-dispositon的,于是我又买了个服务器实例和域名,把bucket绑定到新的域名上面,发现之后视频就可以观看了而不是下载了,详细清参考链接