七牛云 - 对象储存
timg.jpg
对于现在有的程序员还在用本地去存储图片,还是有点费解的
1.
占用自己的服务器资源
2.
第三方服务商有提供数据分析方便观察
我们应该去合理分配我们的资源储存 七牛云-官方文档
希望这篇文章可以唤醒
一些不更新自己技术的程序员们,去改变一下自己。
- 安装
composer
七牛云 (Laravel-china官方文档 || Laravel-学院文档)
composer require zgldh/qiniu-laravel-storage
- 在
Laravel
里注册服务提供者
zgldh\QiniuStorage\QiniuFilesystemServiceProvider::class
- 在框架自带的
config/filesystems.php
里的disks
中新增如下选项
/**
* 七牛云储存
*/
'qiniu' => [
'driver' => 'qiniu',
'domains' => [
'default' => env('QINIU_DEFAULT_URL'), // 你的七牛域名
'https' => 'dn-laravelacademy.qbox.me', // 你的HTTPS域名
'custom' => 'static.xxxx.xyz', // 你的自定义域名
],
'access_key' => env('QINIU_AK'), // AccessKey
'secret_key' => env('QINIU_SK'), // SecretKey
'bucket' => env('QINIU_BUCKET'), // Bucket名字 (七牛云储存空间的名称)
'notify_url' => '', // 持久化处理回调地址
],
上面都是官方文档搬过来的,不重要。
重要的是下面
首先我们要知道的是,申请注册认证完的七牛云有10G
云储存空间,够测试用了
然后我们需要配置一下自己的域名解析
,因为七牛云给的域名,默认30天
他们就收回了,项目就会打不开任何图片了。
-
七牛云 - 控制台 - 绑定域名
七牛云-绑定域名.png -
配置域名解析七牛云的
CNAME
(域名转发)
域名解析.png -
修改七牛云外链默认域名
外链默认域名.png
到这里,
基本没有什么坑了
,只是要注意七牛云30天收回他们给的默认域名
。
下面贴一下Api上传图片代码
和后台Form表单上传代码
Demo:
- Api 流程是:后端获取七牛云Token返给前端,前端带Token上传图片,后端代码:
第一种
Laravel - 官方方法:
use Illuminate\Support\Facades\Storage;
public function getToken()
{
/**
* 使用 Laravel 自带方法
* 文件储存:https://laravel-china.org/docs/laravel/5.5/filesystem/1319
*/
$disk = Storage::disk('qiniu'); // 获取七牛云配置
$token = $disk->uploadToken(env('QINIU_BUCKET')); // 获取上传Token
return $this->response->success($token);
}
第二种
七牛云 - SDK方法:
- 前端接口获取七牛
token
方法上传 (推荐使用这种方法,前后台分离)
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
public function getToken()
{
/**
* Auth 类封装了所有的鉴权方式
*/
$auth = new Auth(env('QINIU_AK'), env('QINIU_SK'));
// 获取上传Token
$data['token'] = $auth->uploadToken(env('QINIU_BUCKET'));
// 上传类 UploadManager 中主要负责文件的上传
// $upLoadMgr = new UploadManager();
// 资源管理类 BucketManager 中主要负责空间中文件的管理: 复制,移动,删除,获取元信息
// $bucketManager = new BucketManager();
/**
* 生成图片随机名称
*/
$data['image_name'] = imageFileRandom();
$data['image_prefix'] = config('qiniu.namespace');
return $this->response->success($data);
}
- Laravel
form
表单后台上传图片代码Demo:(后台渲染,不分离模式)
use Illuminate\Support\Facades\Storage;
public function uploadFile()
{
/**
* 检测是否有上传文件
*/
if (request()->hasFile('file')) {
// 获取文件
$file = request()->file('file');
// 获取七牛云配置
$disk = Storage::disk('qiniu');
// 获取图片名称
$fileName = imageFileRandom();
// 获取文件的绝对路径
$filePath = $file->getRealPath();
// 获取base64
$fileGet = file_get_contents($filePath);
// 上传七牛云
$bool = $disk->put($fileName, $fileGet);
// 检测是否上传成功
if ($bool) {
// 获取下载链接
$data['image_url'] = $disk->downloadUrl($fileName);
dd($data);
}
}
dd('未获取到文件');
}
blade视图
代码
<form method="post" action="{{URL('/applets/v1/uploadFile')}}" enctype="multipart/form-data">
<input name="key" type="hidden" value="<resource_key>">
<input name="x:<custom_name>" type="hidden" value="<custom_value>">
<input name="token" type="hidden" value="<upload_token>">
<input name="crc32" type="hidden" />
<input name="accept" type="hidden" />
<input name="file" type="file" />
<input type="submit" value="上传文件" />
</form>
阿里云OSS - 也是云对象储存 (Object Storage Service)
阿里云-logo.jpg
腾讯云COS - 也是云对象储存 (Cloud Object Storage)
COS.png