首先登陆七牛云服务器 ,建立对应图片存储空间,命名七牛云上传空间名称。
此时 七牛云会分配一个对应标识。
上传到七牛云服务器大概步骤是,首先从七牛云那里获取一个token标识,此可是一个身份凭证。前端在拿着这个凭证,调取七牛云上传图片接口,配合着刚才得到的
token,上传文件。在这一步 记得配置图片回调接口。在回调接口里 处理 图片存储到服务器端的相关信息。
1)在项目下引入七牛云类包,最好是安装七牛云最新的类包哦~
2) 在项目config下建立七牛云专门的配置文件
<?php return [ 'bucket' => 'wash', //上传到七牛云图片存储空间名称 'accessKey' => '-------------------------------', //对应七牛云分配的标识 'secretKey' => '--------------------------------',//对应七牛云分配的标识 'expire' => 3600, 'callbackUrl' => '/qiniu_callback', 'contentType' => 'application/json', 'quality' => env('QINIU_QUALITY', 100), 'detectMime' => 1, 'mimeLimit' => 'video/*;audio/*;image/*', 'minWith' => 750, 'ydUrl' => env('YD_URL'), 'CashCallbackUrl'=>'/q/callback' //回调地址 ];
3) 获取七牛上传凭证 token(示例代码在控制器中)
public function getQiNiuToken(Request $request) { try{ $qiniu = new QiNiu(); //七牛云方法的相关构造文件 $qiniu->setCashCallbackUrl(); //设置七牛云回调地址 $token = $qiniu->getToken(); //得到七牛云凭证token return response()->json(['uptoken'=>$token]); }catch (\Exception $exception) { \Illuminate\Support\Facades\Log::info('获取七牛token异常', [$exception]); return response()->json(['uptoken'=>'']); } }
4)以下代码在qiniu文件中
<?php /** * Created by PhpStorm. * User: HWT51 * Date: 2018/8/7 * Time: 17:15 */ namespace App\Vendor\QiNiu; use App\Models\File; use App\Unit\Json; use Log; use Qiniu\Auth; use function Qiniu\base64_urlSafeDecode; use function Qiniu\base64_urlSafeEncode; use Qiniu\Http\Client; use Qiniu\Http\Error; use Qiniu\Processing\PersistentFop; class QiNiu { /* * 存库空间名 */ protected $bucket; /* * 访问密匙 */ protected $accessKey; /* * 加密密匙 */ protected $secretKey; /* * 过期时间 */ protected $expire; protected $accessToken; protected $userId; protected $callbackUrl; protected $callbackBody = [ 'desc' => '$(x:desc)', 'file_key' => '$(key)', 'file_size' => '$(fsize)', 'file_name' => '$(fname)', 'mimeType' => '$(mimeType)', 'image_width' => '$(imageInfo.width)', 'image_height' => '$(imageInfo.height)', 'image_orientation' => '$(imageInfo.orientation)', ]; protected $files; protected $detectMime; protected $mimeLimit; /** * QiNiu constructor. * @param null $userId */ public function __construct($userId = null) { $this->userId = $userId; $this->bucket = config('qiniu.bucket'); $this->accessKey = config('qiniu.accessKey'); $this->secretKey = config('qiniu.secretKey'); $this->expire = config('qiniu.expire'); $this->contentType = config('qiniu.contentType'); $this->callbackUrl =config('qiniu.ydUrl') . config('qiniu.ydCallbackUrl'); $this->pfopCallbackUrl = config('qiniu.dpaUrl') . config('qiniu.pfopCallbackUrl'); $this->fusionUrl = config('qiniu.fusionUrl'); $this->spaceUrl = config('qiniu.spaceUrl'); $this->detectMime = config('qiniu.detectMime'); $this->mimeLimit = config('qiniu.mimeLimit'); } /** * @param null $policy * @param bool $strictPolicy * @return string */ public function generateToken($policy = null, $strictPolicy = true) { $auth = new Auth($this->accessKey, $this->secretKey); $result = $auth->uploadToken($this->bucket, null, $this->expire, $policy, $strictPolicy); return $result; } /** * set bucket * * @param $bucket * @return $this */ public function setBucket($bucket) { $this->bucket = $bucket; return $this; } /** * set expire * * @param $expire * @return $this */ public function setExpire($expire) { $this->expire = $expire; return $this; } /** * decode qiniuToken * * @param $token * @return mixed */ public static function decodeToken($token) { $tmpArr = explode(':', $token); $decodeData = base64_urlSafeDecode($tmpArr[2]); $data = json_decode($decodeData, true); return $data; } public function setFiles(array $files) { $this->files = $files; return $this; } /** * @return array * @throws \Exception */ public function generateTokensForFiles() { $files = $this->preProcessFiles() ->processFiles() ->generateTokenForFile(); return $files; } public function getToken() { $callbackUrl = $this->callbackUrl; $callbackBody = $this->callbackBody; $callbackBodyJson = json_encode($callbackBody); $policy = [ 'fsizeLimit' => config('setting.FILE_MAX_SIZE'), 'callbackUrl' => $callbackUrl, 'callbackBody' => $callbackBodyJson, 'callbackBodyType' => $this->contentType, 'detectMime' => $this->detectMime, 'mimeLimit' => $this->mimeLimit ]; \Illuminate\Support\Facades\Log::info('上传七牛文件信息',[$policy]); $token = $this->generateToken($policy); return $token; } /** * @param $callbackBody * @param $authorization * @return bool */ public function verifyCallback($callbackBody, $authorization) { $auth = new Auth($this->accessKey, $this->secretKey); $result = $auth->verifyCallback( $this->contentType, $authorization, $this->callbackUrl, $callbackBody ); return $result; } public function setYdCallbackUrl() { //回调地址域名 //回调地址接口 $this->callbackUrl = config('qiniu.ydUrl') . config('qiniu.CashCallbackUrl'); } }
5)在回调地址接口 ,处理图片存储到七牛云的相关操作
大概就是这样了,下面还有一系列处理图片信息存储到表里的流程,就不贴啦