ThinkPHP5.0+七牛云SDK文件上传

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 一、问:为什么建议大家使用对象存储对象存储可以简单理解为用来存储图片、音频、视频等非结构化数据的数据池。相对于主机服务器,具有读写速度快,利于分享的特点。我为什么建议大家使用对象存储?我总结了这六点。

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


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


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


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

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

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


四、实战开发


<?php
namespace 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) {
            //可调整为错误页面
             $this->error('上传文件失败');
        }
        //把七牛云图片路径存储到我们自己的数据库  七牛云图片路径
        $imageUrl = 'http://qtpud69oi.hn-bkt.clouddn.com/' . $fileName;
        //入库业务逻辑 create save 只有这两个模型方法才能自动写入时间戳
        $result =BannerModel::create([
            'image_url'=>$imageUrl,
        ]);
        $this->success('上传文件成功');
    }
    /**
     * 轮播图分页
     */
    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();
        $this->success('删除文件成功');
    }
}
复制代码


五、扩展


概述


本人发布一个集成阿里云、腾讯云、七牛云对象存储的composer包,只需要在框架中下载该依赖包就能够超级快速使用阿里云OSS或腾讯COS及七牛云Koa获取、放置、删除对象!!!



相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
Java 项目管理 开发工具
springboot集成minio SDK实现文件上传下载(上)
springboot集成minio SDK实现文件上传下载
557 0
springboot集成minio SDK实现文件上传下载(上)
|
前端开发 Java 中间件
springboot集成minio SDK实现文件上传下载(下)
springboot集成minio SDK实现文件上传下载
377 0
|
开发工具 对象存储
一个集成阿里云、腾讯云、七牛云对象存储的SDK
概述 超级快速使用阿里云OSS或腾讯COS及七牛云Koa获取、放置、删除对象 Supper quick use Aliyun OSS or Tencent COS or Qiniu Koa to get、put、delete Object.
|
开发工具 Android开发
|
JavaScript 前端开发 开发工具
***七牛跨域上传图片JS SDK
SDK: http://developer.qiniu.com/code/v6/sdk/javascript.html#upload   上传 在页面中引入 plupload,plupload.
2137 0
|
2月前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
9月前
|
API 开发工具 Android开发
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
183 0
|
2月前
|
安全 开发工具 Android开发
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
754 0
|
9天前
|
jenkins 持续交付 开发工具
Android使用Jenkins打包自动维护sdk版本号
Android使用Jenkins打包自动维护sdk版本号
14 0
|
10天前
|
Java Linux 开发工具
由" failed to run the android sdk manager"引起的一系列问题 android
由" failed to run the android sdk manager"引起的一系列问题 android