上传文件到七牛云
因为最近一个项目需要加载的图片文件较大也比较多,导致页面加载比较忙,所以选择使用七牛云,这里记录一下,我是写在了laravel的一个公共方法里面的,方便以后调用!
顺便提一下七牛云的CDN:
CDN的工作原理就是将您源站的资源缓存到位于全国各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、分担源站压力,保证用户访问资源的速度和体验。
你如果问我CDN是什么,我会说“我把坚果从一个距离他们很远的筐里盛出来,放在距离他们很近的眼前,让他们不用一次次起身费劲的去抓,而是坐在那儿就能够到”的行为,就是CDN。
我再举个例子。你在一个园区内工作,你直接访问网络的端口带宽被限定为了2M,这也就意味着你如果要下载一个蓝光资源,那基本是一个让人欲哭无泪的龟速,对吧。但如果有一个特别热门的资源,比如说最近的《复联4》和《权游8》,园区网内部的缓存设备,如果发现很多人都在用2M的带宽龟速下载同一个热门的资源的话,它就会把它缓存下来,这样的好处是,每个人都可以用内网中远远高于2M的带宽来进行下载。而且不用占用访问外网的带宽,同时目标网站的的服务器压力也小的多。
如果让我粗浅甚至不够准确的解释CDN的话,我更愿意用这样这样的更直接的方式来讲:“如果我们把某种网络资源,看成是某种路途遥远又曲折的,很多人都喜欢吃的美食,CDN就是把他们一次性的空降到我们面前(并且假设可以共享且取之不尽),让我们轻而易举的大快朵颐”。
在我看来,CDN的本质是缓存,而内核中支撑它的互联网精神则是共享。
代码仅供参考:
<?php
/* 引入七牛云所需类 */
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
/**
* [uploadQiniu 上传文件到七牛云服务器]
* @param [type] $file [需要上传的文件]
* @return [type] [description]
*/
function uploadQiniu($file)
{
//判断文件是否存在
if (!$file) {
return ['status' => false, 'msg' => '文件不存在!', 'data' => ''];
}
// 需要填写你的 Access Key 和 Secret Key,具体查看七牛后台
$accessKey = config('qiniu.AccessKey');
$secretKey = config('qiniu.SecretKey');
// 构建鉴权对象
$auth = new Auth($accessKey, $secretKey);
// 要上传的空间,这是在你七牛后台设置的
$bucket = config('qiniu.bucket');
// 生成上传 Token
$token = $auth->uploadToken($bucket);
// 要上传文件的本地路径
$filePath = $file->getRealPath();
//获取文件后缀名
$ext = $file->getClientOriginalExtension();
// 上传到七牛后保存的文件名,防止文件名相同,加密一下
$key = md5(time().rand(1000,9999)) . '.' .$ext;
// 初始化 UploadManager 对象并进行文件的上传。
$uploadMgr = new UploadManager();
// 调用 UploadManager 的 putFile 方法进行文件的上传。
list($res, $err) = $uploadMgr->putFile($token, $key, $filePath);
if ($err !== null) {
return ['status' => false, 'msg'=>'上传失败!', 'data' => $err];
} else {
return ['status' => true, 'msg' => '上传成功', 'data' => $res];
}
}
?>