当你要做一个视屏网站, 那么我们当然不会选择将视屏存储到自己的服务器上,因为视频的 Size 灰常 Big ,那么这种情况下都走咱们服务器带宽的话,会造成当你打开一个网站同时种一朵花,可能花会先开……你懂我的意思,如果你自己配置存储视屏的服务器,带宽也会十分浪费;所以我们可以使用一些现有的云存储,那么我们在 Laravel 这个视屏项目中,我们选择阿里云 OSS 来处理。下面我们就来聊聊整体流程……
a) 新建 OSS ,进入到 OSS 管理控制台
友情提示:在阿里云存入1-2元钱,以免播放没钱,不能播放了。
b) 开通 OSS
公共读;* ,允许 Methods:全部勾选上,允许 Headers:也设置为 * ;访问控制;访问控制 控制台,点击 用户管理 ,然后 新建用户,勾选下面的【为改用自动生成 AccessKey 】,然后保存 AccessKey ;授权,让其拥有操作 OSS 的权限( AliyunOSSFullAccess 管理开放存储服务(OSS)权限);外网域名 和 块的名称 复制保存。a) 建立 Oss 管理控制器
php artisan make:controller Component/OssController
b) 配置路由
Route::any('/component/oss', 'Component\OssController@sign');
c) 使用 HDJS
打开 HDJS 手册,复制手册中的 sign 方法到 OssController 中,注意把 static 去掉,然后设置信息,复制如下代码做测试。
前台代码:
<div id="container">
<div class="row">
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<img src="">
<h1 class="text-center"></h1>
<div class="caption">
<input type="hidden" name="file" class="form-control">
<div class="btn-group">
<button type="button" class="btn btn-default" id="selectfiles">选择文件
</button>
<button type="button" class="btn btn-default" id="postfiles">开始上传
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
require(['oss'], function (oss) {
var uploader = oss.upload({
//容器
container: 'container',
//文件选择按钮
pick: 'selectfiles',
//开始上传按钮
upButton: 'postfiles',
//获取签名
serverUrl: '{{asset('/component/oss')}}?',
//上传目录
dir: 'file/',
//local_name本地文件名 random_name随机文件名
name_type: 'random_name',
//允许上传类型
filters: {
//文件类型
mime_types: [
//只允许上传图片和zip,rar文件
{title: "Image files", extensions: "jpg,gif,png,bmp,jpeg"},
{title: "Zip files", extensions: "zip,rar"},
{title: "Video", extensions: "mp4"}
],
//最大只能上传10mb的文件
max_file_size: '10mb',
//不允许选取重复文件
prevent_duplicates: true
},
event: {
//选择文件
select: function (file) {
$('h1').html('0%');
},
//开始上传
start: function (up, file) {
console.log('开始上传');
},
progress: function (up, file) {
//上传进度
$('h1').html('<span>' + file.percent + "%</span>");
},
success: function (up, file, info) {
file.name = "http://laravel-video-oss.oss-cn-beijing.aliyuncs.com/" + file.name;
$("[name='file']").attr('type','text');
$("[name='file']").val(file.name);
$('h1').html('<span style="color: #5FB760">上传成功</span>');
// $('.thumbnail img').attr('src', file.name);
},
error: function (up, file, info) {
alert(info.response);
}
}
});
})
</script>
后台代码:
class OssController extends Controller
{
//生成供前台使用的签名
public function sign()
{
//阿里云 AccessKeyId
$id = '**********';
//阿里云 AccessKeySecret
$key = '********************';
//OSS外网域名: 在阿里云后台OSS bucket中查看
$host = 'http://******.oss-cn-qingdao.aliyuncs.com';
//oss中本次上传存放文件的目录
$dir = $_GET['dir'];
function gmt_iso8601($time)
{
$dtStr = date("c", $time);
$mydatetime = new \DateTime($dtStr);
$expiration = $mydatetime->format(\DateTime::ISO8601);
$pos = strpos($expiration, '+');
$expiration = substr($expiration, 0, $pos);
return $expiration."Z";
}
$now = time();
$expire = 30; //设置该policy超时时间是10s. 即这个policy过了这个有效时间,将不能访问
$end = $now + $expire;
$expiration = gmt_iso8601($end);
//最大文件大小.用户可以自己设置
$condition = [0 => 'content-length-range', 1 => 0, 2 => 1048576000];
$conditions[] = $condition;
//表示用户上传的数据,必须是以$dir开始, 不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录
$start = [0 => 'starts-with', 1 => '$key', 2 => $dir];
$conditions[] = $start;
$arr = ['expiration' => $expiration, 'conditions' => $conditions];
//return;
$policy = json_encode($arr);
$base64_policy = base64_encode($policy);
$string_to_sign = $base64_policy;
$signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true));
$response = [];
$response['accessid'] = $id;
$response['host'] = $host;
$response['policy'] = $base64_policy;
$response['signature'] = $signature;
$response['expire'] = $end;
//这个参数是设置用户上传指定的前缀
$response['dir'] = $dir;
return json_encode($response);
}
}
d) 测试成功

链接地址:http://laravel-video-oss.oss-cn-beijing.aliyuncs.com/file/FiM2KHYfZ3.jpeg
Finally,谢谢大家的阅读!祝每天开心~
版权声明:本文为博主原创文章,未经博主允许不得转载。
微信赞赏
支付宝赞赏
发表评论