问题描述
我正在尝试在React项目中将视频加载到VideoJS Player中。视频是从Web服务返回的,带有特定令牌,可对用户进行身份验证。
假设视频是通过以下API调用返回的:
localhost:8080 / video / 1 /
为了播放此视频,应验证用户身份。换句话说,API使用以下标头返回成功的结果:
auth:令牌
我的VideoJs播放器内置在React组件中,如下所示:
import React from 'react'
import videojs from 'video.js'
export default class VideoComponent extends React.Component {
componentDidMount () {
this.videoJsOptions = {
sources: [{
src: 'http://localhost:8080/video/1/',type: 'video/mp4',}],}
let player = videojs(this.videoNode,this.videoJsOptions,function onPlayerReady() {
console.log('onPlayerReady',this)
})
this.player = player
}
render () {
return (
<div data-vjs-player>
<video ref={node => this.videoNode = node} className="video-js"></video>
</div>
)
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
如何让我的视频组件获取调用URL的令牌并将其传递给请求标头?
解决方法
我会将这个组件作为另一个组件的子组件,如果用户被授权,则该组件的唯一责任是进行API调用并呈现$file_name = "app-release.apk";
$file_ext = "apk";
$file_path = 'my/app/folder/' . $file_name;
header("Cache-Control: public");
header("Content-description: File Transfer");
$contenttype = "application/com.android.package-install";
header("Content-Type: " . $contenttype);
header("Content-Disposition: attachment; filename=\"".$file_path."\"");
header("Content-Tranfer-Encoding: binary");
readfile($file_path);
。遵循这些原则。
如果未授权用户,则可能需要某种类型的重定向或错误消息反馈给用户。我没有将其纳入代码段。
VideoComponent