一、问:为什么建议大家使用对象存储

对象存储可以简单理解为用来存储图片、音频、视频等非结构化数据的数据池。相对于主机服务器,具有读写速度快,利于分享的特点。我为什么建议大家使用对象存储?我总结了这六点。

1、网站数据动静分离,大幅提升网页性能

一般情况下,我们都是建议使用主机服务器和对象存储分工合作的方式来存储网站数据。主机服务器主要负责存储网站的动态数据,对象存储则用来存储网站的静态文件。从而实现网站的动静分离,当用户访问一个网站时,分别从主机服务器和对象存储的服务器同步读取数据,可以大幅的提升网页性能。

理想情况下,还会结合内容分发网络来使用,这个我们以后会说到。

2、单独的文件管理界面,管理网站文件和本地电脑一样方便

无论是腾讯云、阿里云、七牛云,对象存储都有单独的管理控制台,腾讯云和阿里云还有专门的电脑客户端。你不必打开网站,就可以像使用百度云盘一样使用对象存储来管理你的网站文件,除了上传、下载、预览等常用功能,还可以直接在对象存储上进行图片处理/媒体转码/数据分析等。

3、本质是”内置大容量硬盘的分布式服务器“,同一个文件支持跨域共享

对象存储的本质是“内置大容量硬盘的分布式服务器”,对象存储有自己的CPU、内存、网络和磁盘系统,具备一定的智能,同一个对象存储数据池可以新建不同的存储桶(bucket),分别用来存储不同网站的数据,彼此互不干扰。而且同一个文件可以引用到不同的网站,可以有效的减少数据冗余。

4、储存节点多,支持跨地域实时同步,实现异地容灾

假设你的图片等数据存储在你自己的服务器上,只能通过定期数据备份的方式保护你的数据。数据量大的话,每次备份都需要大量的时间和占用大量的磁盘空间,管理起来还不方便。

如果你的数据放置在对象存储的数据池了,并与网站关联。那么静态文件的备份就可以交给对象存储。你只需要对网站少量的动态文件进行备份。省时省力。

比如我使用对象存储,我在离我最近的节点【深圳】来存储网站的图片等静态文件。但是考虑到极端情况,比如深圳节点由于突然停电,可能导致数据全部丢失。但如果之前我选择了【杭州】作为第二个存储节点,而且设置【深圳】节点的数据实时增量同步到【杭州】节点。那么就算深圳节点的数据丢失了,但是我在杭州的数据还是可以使用。等到恢复供电,我再把数据从杭州节点同步回深圳节点就可以了。这就是我们说的异地容灾。

5、成本低,资源弹性伸缩,按需付费

现在阿里云对象存储(简称OSS)40G容量一年的价格大概是9块钱。腾讯云对象存储(简称cos)更是有免费的50G容量,加上10G的免费下行流量。已经可以满足大部分个人站点的使用需求。不像服务器的流量是固定的,包含在服务器的费用里面了。无论你用或不用,都是这么多。对象存储可以是根据你的实际使用量进行计费。

6、节省服务器空间

为什么选择将这一点放在最后说呢?因为现在服务器的价格还算实惠,活动也比较多。大部分站长已经不存在服务器空间不够用的问题。而且对象存储的出现也不是为了解决服务器空间不够用的问题。而是为了结合【块存储】、【文件存储】各自的优点,从而实现高效的文件读写和分享。但是节省了服务器空间还是不争得事实,所以还是提一下吧。

二、如何使用七牛云

  1. 前提准备
  2. 申请七牛云账户(忽略);
  3. 开通对象存储功能(空间0/10GB,是免费的);
  4. 创建 bucket (空间名称);
  5. 在秘钥管理,创建一个秘钥,获取 AccessKey / SecretKey;

三、集成PHP-SDK

七牛云开发文档:https://developer.qiniu.com/kodo

(一)Composer 安装 SDK(推荐使用)
进入cmd 终端,切换目录到你部署项目的根目录下,执行以下命令即可:composer require qiniu/php-sdk

(二)传统方式安装
进入七牛云,下载官方 PHP-SDK,将下载下来的SDK解压,放入项目第三库文件(vendor 或者 extend)

四、实战开发

<?phpnamespace app\cms\controller;//引入七牛云SDK
use Qiniu\Config;
use Qiniu\Storage\BucketManager;
use think\Controller;
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
use app\cms\model\Banner as BannerModel;class Banner extends Controller
{//添加轮播图页面public function addBannerHtml(){return view('banner/add_banner');}/*** 轮播图上传接口*/public function uploadBanner(){//接收文件上传的值$file = $_FILES;//本地的文件路径$localFilePath = $file['file']['tmp_name'];//截取文件后缀名//$suffix = '.jpg';$suffix = strtolower(substr($file['file']['name'],strpos($file['file']['name'],'.')));//生成一个唯一的文件名称,重命名 (md5加密原文件名+秒+随机数)$fileName = md5($file['file']['name']) . date('s',time()) . rand(1,9999999);$fileName .= $suffix;//上传七牛云业务逻辑$accessKey = ''; //去控制台的秘钥管理拿AK$secretKey = '';//去控制台的秘钥管理拿SK$auth = new Auth($accessKey, $secretKey);//七牛云桶名,根据自己实际进行填写$bucket = '';// 生成上传Token$token = $auth->uploadToken($bucket);// 构建 UploadManager 对象$uploadMgr = new UploadManager();// 调用 UploadManager 的 putFile 方法进行文件的上传。list($ret, $err) = $uploadMgr->putFile($token, $fileName, $localFilePath);//错误信息提示if ($err != null) {//可调整为错误页面return json(['msg'=>'上传失败','code'=>201,'result'=>'']);}//把七牛云图片路径存储到我们自己的数据库  七牛云图片路径$imageUrl = 'http://qtpud69oi.hn-bkt.clouddn.com/' . $fileName;//入库业务逻辑 create save 只有这两个模型方法才能自动写入时间戳$result =BannerModel::create(['image_url'=>$imageUrl,]);return json(['msg'=>'上传成功','code'=>200,'result'=>$result]);}/*** 轮播图分页*/public function bannerList(){// 查询状态为1的用户数据 并且每页显示10条数据$list = BannerModel::where('status',1)->paginate(3);// 渲染模板输出return view('banner/get_list',compact('list'));}/*** 删除轮播图接口*/public function deleteBanner(){//接收参数$params = input();//删除逻辑,删除七牛云,删除数据库数据$banner = BannerModel::get($params['id']);//删除七牛云$accessKey = '';//去控制台的秘钥管理拿AK$secretKey = '';//去控制台的秘钥管理拿SK//七牛云桶名,根据自己实际进行填写$bucket = '';//域名长度$len = strlen('http://qtpud69oi.hn-bkt.clouddn.com/');//要删除七牛云图片路径$delImageUrl = substr($banner->image_url,$len);$auth = new Auth($accessKey, $secretKey);$config = new \Qiniu\Config();$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);$bucketManager->delete($bucket, $delImageUrl);//删除数据数据$banner->delete();return json(['msg'=>'删除成功','code'=>200,'result'=>'']);}
}

最后微信搜:《柯作》

有问题公众号反馈

ThinkPHP5.0+七牛云SDK文件上传相关推荐

  1. SpringBoot(24) 整合七牛云实现文件上传

    一.前言 本文将基于springboot2.1.8.RELEASE整合七牛云实现文件上传 本文参考 https://www.keppel.fun/articles/2019/02/27/1551262 ...

  2. html七牛云图片文件上传,使用Js将文件图片视频上传到七牛云详细教程-Fun言

    前言 因为项目需要,需要将一些较大文件上传到七牛云,以前都是通过数据流上传到服务端,然后在服务端进行上传操作,因为以前文件都很小所以无所谓,但是要是几百M的文件就不行了,所以就采用前端js直接上传到七 ...

  3. 使用七牛云进行文件上传

    目录 一.七牛云入门测试 1.注册七牛云账号,完成后选择对象存储 2.在里面创建空间,一个空间相当于一个文件夹,就是将对象上传到的地方 3.查看个人秘钥,注册完成账号后,会有一个秘钥,上传文件的时候进 ...

  4. php文件上传七牛云,PHP 文件上传七牛云

    PHP 之Laravel 使用qiniu/php-sdk, itbdw/laravel-storage-qiniu, 组件上传文件到七牛云. 一.  序言 这几天在laravel 框架上使用qiniu ...

  5. (七牛云系列)七牛云指定文件上传路径(各种语言通用)

    目录 解决方法 一个实例 解决方法 方法很简单 假如你有一个文件名为xxx.jpg 同时你在七牛云中有一个文件夹为cs 则你在上传文件时,需要将文件名修改为cs/xxx.jpg,七牛云会自动识别,并放 ...

  6. SpringBoot集成七牛云-实现文件上传、下载、解决报错、详细案例

    用自己电脑做文件存储,我想没谁愿意了吧,来来和我一起白嫖吧,伙伴们!!!

  7. 七牛云 vue 图片上传简单解说,js 上传文件图片

    七牛云 vue 图片上传简单解说,js 上传文件图片 一.七牛云简介 首次使用七牛云存储进行项目的图片存储,整了一上午才整明白,这些官方的教程把明白人也给说糊涂了,文档很不规范. 七牛云有免费的使用额 ...

  8. 微服务电商实战(十一)搭建vue项目对接注册登陆接口,解决跨域问题,使用七牛云实现头像上传

    一.简介 node.js版本:v12.16.3 node.js下载 vue官网教程 iview介绍 上传头像接口,图片存储在七牛云中,注册并实名认证之后可以免费使用 以下会描述使用vue搭建项目框架的 ...

  9. Asp.net MVC 1.0 RTM中实现文件上传

    Asp.net MVC 1.0 RTM中实现文件上传 在我们开始之前,你需要知道一个form以post方式上传文件的方式,你将要增加一个特别的enctype attribute到form标签上,为了这 ...

最新文章

  1. ICMP最典型的应用PING和traceroute
  2. hive 创建/删除/截断 表(翻译自Hive wiki)
  3. 【Spring注解系列14】@Profile进行环境切换
  4. hover时候缓慢切换两张图片
  5. NYOJ--927--dfs--The partial sum problem
  6. 微课|玩转Python轻松过二级(3.2节):元组与生成器推导式
  7. linux的启动流程和加载程序
  8. hdu1247Hat’s Words(trie树)
  9. jdk8 lambda
  10. 单摄像机对于二维平面的测量
  11. weblogic10 配置 domian
  12. Unity中获取一个物体下所有的子物体的方法
  13. BOSS直聘自动投简历聊天机器人的实现过程
  14. TikTok引领全球娱乐潮流,成为游戏出海营销新据点
  15. 上位机与下位机交互--让socket不死
  16. 前百度首席科学家张栋:36岁以前做到这8点再谈梦想
  17. L1-054 福到了 (15分)(C语言)
  18. 第十三天 - 封装JDBC操作Hive工具类 - HWI配置与使用 - JavaWeb结合Hive
  19. Linux系统启动流程(超详细)
  20. 【低代码开发】智慧水务解决方案

热门文章

  1. 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇)(期末大作业、课程设计、毕业设计、结课项目)
  2. solr引入mysql数据库数据,出现Requests: 1, Fetched: 0, Skipped: 0, Processed: 0
  3. python车牌识别系统抬杆_昆明车牌识别自动抬杆系统
  4. js 数组扁平化和树之间相互转换
  5. 【考研经验】一个苍山的不入流的学生的考研之路
  6. 华硕服务器主板装系统,华硕主板安装windows11失败?BIOS设置教程
  7. ​​​​Convolutional Neural Networks on Graphswith Fast Localized Spectral Filtering
  8. 使用cfssl签发证书
  9. 赛灵思 Xilinx UG1506 - Versal ACAP 开发板系统设计方法指南(中文版) (v2021.2)
  10. 松下服务器编码器由谁该信号,松下伺服电机编码器判断好坏的方法以及功能和作用...