前言

路漫漫其修远兮,吾将上下而求索。学习 Laravel 之初觉得所有东西都很厉害的样子,现在看来就是很厉害啊!最近在写一个项目上传的模块,要上传图片到七牛云,昨天看了一下午七牛云官方的文档感觉还是迷迷糊糊的,今天尝试着写一写感觉满足我的要求还是蛮简单的,于是赶紧记录一下,每一篇博客都将是我进步的基石。

安装七牛云 SDK

composer require qiniu/php-sdk

获取密钥

首先到七牛云的官网注册账号登陆后,账号->密钥->创建新密钥:

然后新建一个空间,获取七牛域名:

最后将这些信息写到配置文件中:

QINIU_BUCKET=stu2e   //刚刚创建的空间名称,用来保存图片
QINIU_ACCESSKEY=ja_fS4iONGxJgX7h11oxmA0-KhJfrUmHkSMEb_7s
QINIU_SECRETKEY=aO36g6wnLyItch6jgIwglJR17TsR0IlcO5beooxt // AK 和 SK 用来鉴权
QINIU_DOMAIN=7xn855.com1.z0.glb.clouddn.com //图片上传成功后会返回一个 Key 值,domain/key 就是上传的资源的路径

SDK 使用

为了方便使用七牛云服务,于是我将它封装成一个服务,顺便复习以下 Laravel 的 Service 和 Facade 模式。具体的流程就不写了,直接写方法的实现吧~

require_once base_path().'/vendor/autoload.php';
//base_path()获取 laravel 项目的根目录,引入 SDK use Qiniu\Auth;
use Qiniu\Storage\UploadManager; class QiniuService
{
protected $domain = null;
protected $bucket = null;
protected $accessKey = null;
protected $secretKey = null;
protected $auth; public function __construct()
{
$this->domain = env('QINIU_DOMAIN');
$this->bucket = env('QINIU_BUCKET');
$this->accessKey = env('QINIU_ACCESSKEY');
$this->secretKey = env('QINIU_SECRETKEY'); $this->auth = new Auth($this->accessKey, $this->secretKey); //鉴权
} public function upLoad($filePath)
{
$token = $this->getToken();
//上传时会对比上传表单中 post 过来的 token 是否正确
$uploadMgr = new UploadManager();
list($ret, $err) = $uploadMgr->putFile($token, null, $filePath);
//第二个参数是保存到空间的图片的名字,默认就好了。
if ($err !== null) {
return $err;
} else {
return $ret;
}
} public function getDomain()
{
return $this->domain;
} public function getToken()
{
return $this->auth->uploadToken($this->bucket);
//給上传表单生成上传 token
}

路由

use App\Http\Requests;
use Illuminate\Http\Request; Route::get('/test', function(){
$token = Qiniu::getToken();
return view('test')->with('token', $token);
}); Route::post('/test',function(Request $request){
$payload = $request->all();
$result = Qiniu::upLoad($payload['file']);
return Qiniu::getDomain().'/'.$result['key'];
});

HTML 页面

@extends('app')

@section('content')
<div class="container">
<form method="post" action="{{ url('test') }}" enctype="multipart/form-data">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input name="token" type="hidden" value="{{ $token }}">
<input name="file" type="file" />
<input type="submit" value="上传"/>
</form>
</div>
@endsection

关于这个 token 问题,Laravel 默认开启了csrf防御机制,所以上传表单应该包括两个 token 。

ok,简单的上传图片就完成了,打开页面,选择一张图片,上传后就会返回该图片在七牛云空间里的资源路径,拷贝到浏览器地址栏,进入就能看到图片了。

Laravel 简单使用七牛云服务的更多相关文章

  1. 企业证书发布app到七牛云服务

    ---恢复内容开始--- 最近在做企业证书发布app,从申请企业证书,到测试程序发布到七牛云存储.整了几天终于实现了,整理一下资料. 1.首先,申请企业证书. 到苹果开发网站申请企业证书 https: ...

  2. thinkphp3.2使用七牛云上传文件

    最近项目中用到了七牛云服务,来分享一下thinkphp使用七牛云来进行文件上传 1.首先在七牛云创建一个空间,例如空间名为test.获取secrectKey,accessKey 2.在thinkphp ...

  3. Linux系统定时备份网站文件到七牛云存储脚本

    1.七牛云账号注册. 有些朋友可能会问为什么要备份到七牛云?很简单,七牛云免费注册就能获取1G的存储空间,只要简单几步操作完成实名认证即可获取10G的存储空间,对于一般个人站点来说已经足够备份使用了. ...

  4. Python在七牛云平台的应用(三)简单的人脸识别

    前言 这是最后一篇介绍python在七牛云平台的应用了,因为-前两篇文章第一篇分享了怎么安装七牛的官方库以及怎么对自己的空间进行下载上传,删除等行动.而第二篇则分享了怎么利用七牛的API接口,由于七牛 ...

  5. laravel上传文件到七牛云存储

    背景 最近在用PHP和laravel框架做一个图片网站,需要将图片存贮到云端,搜索下了对比了下功能,发现七牛云存储不错(主要小流量免费),便选择使用七牛作为图片存储空间. 要实现的功能很简单,选择本地 ...

  6. 七牛云一站式 SSL 证书服务上线,即刻使用最多可省 7 万

    2017 年 ,随着谷歌.苹果和腾讯对原 HTTP 的相继限制,全站 HTTPS 已经成为了当下趋势,所以安装 SSL 证书成为网站建设中必不可少的一步. 在 2016 年底,七牛云已经与 Trust ...

  7. 上传图片到七牛云(服务端 node.js sdk)

    大体思路 前端要上传图片到七牛云,需要有一个token进行授权操作,而获取这个上传的upload token(以下简称upToken),在服务端需要一定的身份校验,比如说:只有登录的vip用户才能拿到 ...

  8. 七牛云简单实用-uploadManager.put(..)抛出异常

    描述: 本人小白,最近在写一个仿头条的项目,其中有用到七牛云做为图片的存储以代替本地服务其存储,按照视频教程配置服务器端的简单上传功能,总是报错: 参照官方文档:https://developer.q ...

  9. 第2-3-1章 文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    目录 文件存储服务 1. 需求背景 2. 核心功能 3. 存储策略 3.1 本地存储 3.2 FastDFS存储 3.3 云存储 3.4 minio 4. 技术设计 文件存储服务 全套代码及资料全部完 ...

随机推荐

  1. SSD常见问题的技术分析

    AHCI对性能的影响 AHCI,全称Advanced Host Controller Interface,即高级主机控制器接口,是一种相比老旧的“IDE虚拟模式”更适合新一代SATA存储设备通信的协议 ...

  2. Node.js模块os

    OS 操作系统模块 os.hostname() 操作系统的主机名. os.type() 操作系统的名称 os.release() 操作系统的发行版本 os.uptime() 当前系统的时间 以秒为 o ...

  3. 纯css加伪类实现关闭提示创窗口

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8&quo ...

  4. sharepoint 自定义字段实现省市联动

    最后实现效果如下:设置栏如下:解决方案结构如下: fldtypes_RoyCustomField.xml 内容如下: <?xml version="1.0" encoding ...

  5. Repeater 无刷新分页

    原文:http://blog.csdn.net/Sandy945/archive/2009/05/22/4208998.aspx 本文讲述的是如何利用 XMLHttpRequest 来对 Repeat ...

  6. VS2013 RC 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral.........

    微软发布了vs2013的RC版本,更新了自己机器上的vs,在创建项目过程中,发现出现如题的相关错误,查了相关msdn的资料,才了解到vs已经全面切换到使用NuGet这个第三方开源工具来管理项目包和引用 ...

  7. Android应用开发基础篇(5)-----Handler与多线程

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/19/2358155.html 一.概述 Handler这个类主要用来发送和处理消息的.它有多个发 ...

  8. 如何将 MFC ActiveX 控件标记为安全,脚本和初始化

    MSDN原文.ActiveX控件标记安全(可以不仅仅是MFC ActiveX) 概要 默认情况下,MFC ActiveX 控件未标记为对脚本编写是安全的和对初始化是安全的.控制运行在 Internet ...

  9. Java "double字符串转数字"

    1.int 表示数字的简单类型(值类型),double 表示数字的双精度类型(值类型),  而Integer和Double类型是一个引用的复杂类型 2.Integer.valueOf(String s ...

  10. 升级Xcode6.3插件失效解决办法

     1.打开终端,输入以下代码获取到DVTPlugInCompatibilityUUID         defaults read /Applications/Xcode.app/Contents/I ...