七牛云: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/
,然后项目静态资源img
,css
,js
等访问改成自定义的镜像空间设置的域名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']}
当本地图片更改,读取还是从七牛云读取旧图片,可以刷新预取,或域名管理=>配置=>修改缓存配置。
配置流程如下:
创建空间: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
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
网友评论