美文网首页
七牛云存储配置及qsehll操作笔记!

七牛云存储配置及qsehll操作笔记!

作者: DragonersLi | 来源:发表于2019-10-25 12:44 被阅读0次
七牛云:https://www.qiniu.com/注册账户,个人或企业实名认证。
个人中心->密钥管理获取AK(AccessKey)和SK(SecretKey)
对象存储->新建存储空间,输入空间名称,访问控制选择公开或私有。
当您将空间设成公开时,上传成功后可以http://<domain>/<key>进行访问。

当您将空间设置成私有时,必须获得授权,才能对空间内的资源进行访问。 
私有资源下载是通过HTTP GET的方式访问特定的 URL。
私有资源URL与公开资源URL相比只是增加了两个参数e和token,
分别表示过期时间和下载凭证。一个完整的私有资源 URL 如下所示:

http://<domain>/<key>?e=<deadline>&token=<downloadToken>
参数e表示 URL 的过期时间,采用Unix时间戳,单位为秒。
超时的访问将返回 401 错误。参数token表示下载凭证。
下载凭证是对资源访问的授权,不带下载凭证或下载凭证不合法都会导致 401 错误,表示验证失败。 

注意: 
如果请求方的时钟未校准,可能会造成有效期验证不正常,例如直接认为已过期。因此需要进行时钟校准。 
由于开发者无法保证客户端的时间都校准,所以应该在业务服务器上创建时间戳,并周期性校准业务服务器时钟。
项目使用的是tp5.0,看官方文档手册,包引入composer require qiniu/php-sdk,包内有example案例:
image.png
新建application/extra/qiniu.php如下内容:
<?php
/*
 * 七牛云配置
 */
return [
        'accessKey' => 'xxx',//七牛云 访问ID
        'secretKey' => 'xxx',//七牛云 访问密钥
        'domain' => 'https://cdn.xxx.com',//空间对应的网址
        'bucket' => 'xxx',//空间名
];
form表单上传图片
<form  action="{:url('admin/qiniu/add')}" method="POST" enctype="multipart/form-data"><input type="file" id="image" name="image"  /><input type="submit" value="提交"  /></form>
简单封装service调用,Qiniu.php
<?php

namespace app\common\service;
#七牛云存储
use Qiniu\Auth;// 引入鉴权类
use Qiniu\Storage\UploadManager;// 引入上传类

class Qiniu {



    public function __construct()
    {

    }

    /*
     * 文件上传
     * $file 上传的文件对象
     * $path 上传的路径
     * $type【object:文件对象上传1;filename:文件名上传0】
     * $name 空间名
     */
    public static function upload($file ,$path = '',$name = '',$type = 0){
        if(empty($file) || empty($name)){
            return ["code"=>400,"msg"=>'参数不能为空!',"data"=>[]];
        }
        $auth = new Auth(config('qiniu.accessKey'), config('qiniu.secretKey'));// 构建鉴权对象(用于签名的公钥,用于签名的私钥)
        $token = $auth->uploadToken(config('qiniu.bucketCdn'));

        $uploadMgr = new UploadManager();
        if($种类){
            $filePath = $file->getRealPath(); // 要上传图片的本地路径
            $ext = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);  //后缀
            $key = $path.DS.date('Y').DS.date('m').DS.date('YmdHis') . rand(10000, 99999) . '.' . $ext;// 上传到七牛后保存的文件名

        }else{
            #通过本地文件名上传
            $filePath = $file;  // 要上传文件的本地路径
            $arr = explode(DS,$filePath);
            $key = $path.end($arr);// 上传到七牛后保存的文件名
        }

        list($res, $error) = $uploadMgr->putFile($token, $key, $filePath);
        return ($error !== null)
            ? ["code"=>400,"msg"=>$error,"data"=>[]]
            : ['code'=>200,'msg'=>'上传成功','data'=>['url'=>config('qiniu.domainCdn').DS.$key,'hash'=>$res['hash'],'key'=>$res['key']]];

    }
    /*
     * 删除七牛云资源
     * 成功返回null
     */
    public static function delimg($key ='',$name=''){
        $auth = new Auth(config('qiniu.accessKey'), config('qiniu.secretKey'));
        $config = new \Qiniu\Config();
        $bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
        return $bucketManager->delete(config('qiniu.bucketCdn'), $key);

    }
}

 
#调用示例:
use app\common\service\Qiniu as QiniuService; #引入service类
dump(QiniuService::upload($this->request->file('image')));#打印上传返回结果

 

######上传成功返回
 
array(3) {
  ["code"] => int(200)
  ["msg"] => string(12) "上传成功"
  ["data"] => array(3) {
    ["url"] => string(49) "q1yyksgj6.bkt.clouddn.com/2019120416030549394.png"
    ["hash"] => string(28) "FlyeUDxUz28G3BVoA6njPbX55cDw"
    ["key"] => string(23) "2019120416030549394.png"
  }
}

共有空间直接domain + key 访问图片,私有空间直接用 domain + key 访问报错如下:
{ 
*   "error": "download token not specified" 
} 
测试域名30自然日系统回收,所以添加自己的域名访问资源
融合CDN->域名管理->添加域名(已备案的域名),源站配置选七牛云存储已创建的空间。
七牛云配置如下:
image.png
空间管理、空间设置、镜像回源设置回源地址!【更换域名,或多个域名公用一个空间等】
镜像存储设置:

镜像源:填入自己网站的地址http://m.xxx.com/,然后项目静态资源imgcssjs等访问改成自定义的镜像空间设置的域名static.xxx.com.比如:

        '__IMG__' => '/statics/images',
        '__JS__'     => '/statics/js',
        '__CSS__'    => '/statics/css',
...
改成:
        '__IMG__' => 'http://static.xxx.com/statics/images',
        '__JS__'     => 'http://static.xxx.com/statics/js',
        '__CSS__'    => 'http://static.xxx.com/statics/css',
...
前端展示:
__IMG__/xxx.png
__JS__/xxx.js
__CSS__/xxx.css 
一些上传文件,文件名保存数据库的。比如:/uploads/products/xxx.png
页面上前面要加上http://static.xxx.com,可模板调用config.php中的配置

{$Think.config.qiniu.domain['static']}

image.png
当本地图片更改,读取还是从七牛云读取旧图片,可以刷新预取,或域名管理=>配置=>修改缓存配置。

配置流程如下:

创建空间:test
创建域名: 复制CNAMEcdn-test-com-idvbazf.qiniudns.com, aliyun域名配置cdn.test.com 值为CNAME
回源设置: 回源地址主路线为网站地址:https://m.test.com
回源配置:七牛云存储,选择创建的空间test
缓存设置:使用自定义推荐配置
HTTPS配置:使用七牛云在线申请,在SSL证书服务上传已有,或者在线申请验证项目public下/.well-known/pki-validation/fileauth.txt文件,内容为202004141338582eb04ctwyq928pk1lqjpmcsb9y3l7751u1ipp7uug7tpl6s672
图片优化:开启图片自动瘦身功能
域名管理:创建域名,泛域名,paijinhua.com,HTTP,图片小文件,七牛云存储,空间paijinhua,自定义推荐缓存配置,创建!
空间管理,图片样式,可以新建样式代码调用:图片地址?处理接口:

https://dn-portal-files.qbox.me/sample1.jpg?imageView2/1/w/80/h/80/interlace/1/q/100|imageslim

image.png
qshell工具使用gitHub:https://github.com/qiniu/qshell
官网文档:https://developer.qiniu.com/kodo/tools/1302/qshell
windows下载后,把路径添加到系统环境变量,文件改名qshell.exe
未改名一直报错qshell is not recognized as an internal or external command...
C:\Users\Administrator\.qshell文件夹有account.json文件为当前用户配置,old_account.json为其它用户配置
######当空间不用想删除时,因文件太多需要借助qshell工具来实现!
qshell acount #当前用户
D:\WorkSpace\qiniu>qshell account accessKey secretKey paijinhua-statics #添加用户(用户ID,密钥,空间名)
D:\WorkSpace\qiniu>qshell account ls #查看所有用户
D:\WorkSpace\qiniu>qshell account cu  username #切换用户,不填username默认上一个用户




D:\WorkSpace\qiniu>qshell listbucket paijinhua-statics #获取所有空间资源
D:\WorkSpace\qiniu>qshell batchdelete paijinhua-statics #批量删除空间资源
<DANGER> Input acdfff to confirm operation: acdfff  #危险:输入acdfff确认操作
D:\WorkSpace\qiniu>qshell listbucket BucketName  -o BucketName.list.txt #列出空间所有文件
D:\WorkSpace\qiniu>qshell batchdelete --force BucketName -i BucketName.list.txt#删除空间所有文件

根据文件前缀匹配导出文件,再根据导出文件删除。

#踩坑(前缀加了引号):
D:\WorkSpace\qiniu>qshell listbucket BucketName  -p '/uploads/QRCode/' -o del.txt #列出空间该前缀所有文件
D:\WorkSpace\qiniu>qshell listbucket BucketName  -p /uploads/QRCode/ -o del.txt #列出空间该前缀所有文件
D:\WorkSpace\qiniu>qshell batchdelete  BucketName  -i del.txt#删除空间该前缀文件  
Delete 'paijinhua' => '/uploads/QRCode/product/83792/588/product_0.png' success  #删除成功提示
windows下使用qshell下载文件到本地电脑
qshell qdownload -c 10 qdist_down.conf(-c 10 :下载并发数可同时下载10个文件)
qdist_down.conf配置如下:
#参数示例:
{
    "dest_dir"   :   "<LocalBackupDir>",
    "bucket"     :   "<Bucket>",
    "prefix"     :   "image/",
    "suffixes"   :   ".png,.jpg",
    "cdn_domain" :   "down.example.com",
    "referer"    :   "http://www.example.com",
    "log_file"   :   "download.log",
    "log_level"  :   "info",
    "log_rotate" :   1,
    "log_stdout" :   false
}
#下载配置:
{
    "dest_dir"   :   "D:\\WorkSpace\\qiniu\\files",
    "bucket"     :   "qrcode-agents", 
    "cdn_domain" :   "https://static.xxx.com", 
    "log_file"   :   "download.log",
    "log_level"  :   "info"
}

image.png

相关文章

网友评论

      本文标题:七牛云存储配置及qsehll操作笔记!

      本文链接:https://www.haomeiwen.com/subject/fxjsvctx.html