在线教育开发之七牛改写上传方式
为了更好地做到代码与资源分离,大部分的公司都会把一些静态文件(js、css、img、视频等等文件)都会放到第三方/单独的服务器上去。
原因:
①在后期维护网站的也比较方便;
②资源分离之后可以减轻代码服务器的压力;
③如果将资源分离和CDN(content delivery network)配合起来用,对于bat之类的大公司来说1年能够省下的成本至少都是7位数以上;
1.前往七牛官网注册,并实名;
2.创建后期需要的对象存储实例
3.下载七牛的代码依赖库
- Github地址:https://github.com/zgldh/qiniu-laravel-storage(安装使用步骤里面都含有)
- 安装: composer require zgldh/qiniu-laravel-storage
- 配置: config/app.php 里面的 providers 数组, 加上一行
zgldh\QiniuStorage\QiniuFilesystemServiceProvider::class - config/filesystem.php 里面的 disks数组加上:
'disks' => [
... ,
'qiniu' => [
'driver' => 'qiniu',
'domains' => [
'default' => 'xxxxx.com1.z0.glb.clouddn.com', //你的七牛域名
'https' => 'dn-yourdomain.qbox.me', //你的HTTPS域名
'custom' => 'static.abc.com', //Useless 没啥用,请直接使用上面的 default 项
],
'access_key'=> '', //AccessKey
'secret_key'=> '', //SecretKey
'bucket' => '', //Bucket名字
'notify_url'=> '', //持久化处理回调地址
'access' => 'public' //空间访问控制 public 或 private
'hotlink_prevention_key' => 'afc89ff8bd2axxxxxxxxxxxxxxbb', // CDN 时间戳防盗链的 key。 设置为 null 则不启用本功能。
// 'hotlink_prevention_key' => 'cbab68a279xxxxxxxxxxab509a', // 同上,备用
],
],
效果如下:
4.对上面的代码进行修改配置七牛
注意: 密钥需要在 七牛官网 “个人中心”配置;Bucket名字 就是七牛中对象存储的空间名称。
5.使用七牛的SDK改写(新建)已经实现的上传功能
- 关闭本地上传,新增七牛上传(两处,下面还有一处)
- 编辑上传方法
//上传至七牛云
public function qiniu(Request $request)
{
//判断是否有文件上传和判断是否长传成功
if ($request->hasFile('file') && $request->file('file')->isValid()){
//重命名
$filename = sha1(time().$request->file('file')->getClientOriginalName()).'.'.$request->file('file')->getClientOriginalExtension();
//文件保存移动
Storage::disk('qiniu')->put($filename,file_get_contents($request->file('file')->path()));
$msg = [
'code' => 1,
'msg' => '上传成功',
'path' => Storage::disk('qiniu')->getDriver()->downloadUrl($filename),
];
}else{
$msg = [
'code' => 0,
'msg' => $request->file('file')->getErrorMessage(),
];
}
return response()->json($msg);
}
- 需要修改的地方有这几处
6.效果如下:
复制路径可以查看图片
在七牛服务器中也可以看到新添的图片
至此,上传成功!!