关于上传图片到七牛云

首先登陆七牛云服务器 ,建立对应图片存储空间,命名七牛云上传空间名称。

此时 七牛云会分配一个对应标识。

上传到七牛云服务器大概步骤是,首先从七牛云那里获取一个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)在回调地址接口 ,处理图片存储到七牛云的相关操作

大概就是这样了,下面还有一系列处理图片信息存储到表里的流程,就不贴啦

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值