PHP

之Laravel 使用qiniu/php-sdk, itbdw/laravel-storage-qiniu, 组件上传文件到七牛云.

一.  序言

这几天在laravel 框架上使用qiniu,  发现这类教程有些少, 所以就把自己的经验写下来, 以供大家参考一下.

在这里有两个组件可以使用, 一个是PHP 通用的qiniu/php-sdk, 只要使用PHP,就可以使用的通用组件,

而itbdw/laravel-storage-qiniu, 是其作者根据laravel 的特性优化qiniu/php-sdk 组件从而方便在laravel 上使用的文件上传组件. 感谢他们!

二.  前文

环境: php:7.0.12, laravel.

1) 首先, 建立一个小模块.

a) 链接地址

admin/test/fileupload

b) 路由

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function() {

Route::get('test/fileupload', "TestController@fileUpload");

Route::post('test/upload', "TestController@upload");

});

c) 控制器展现视图

TestController/fileUpload

d) 视图

admin/test/fileupload

视图只需要一个表单, 加上input:file, 即可.

Tip: 要想上传文件, 须在更改form 表单编码, 这里介绍enctype. 文件上传时必须使用multipart/form-data.

. enctype: 规定在发送表单数据之前如何对其进行编码。有三种设置类型

默认为application/x-www-form-urlencoded:发送前编码所有字符

. multipart/form-data:不对字符编码,包含文件上传控件的表单时,必须使用该值

. text/plain:空格转换为 "+" 加号,但不对特殊字符编码。

e) 处理.

在这里选一张图片点击上传, form 表单提交到TestController/upload 控制器. dd 打印一下.

看到上传文件信息, 现在开始上传七牛云操作.

三. 安装

1) composer 下载qiniu/php-sdk, itbdw/laravel-storage-qiniu 两个组件.

这两个组件都可以在https://packagist.org/ 上搜到. 其实各个组件也都自带教程, 只是不针对.

2) 打开命令行cd 到laravel 文件夹下

cd ../laravel

(这里cd 你自己的地址)

3) 安装itbdw/laravel-storage-qiniu, qiniu/php-sdk

composer require itbdw/laravel-storage-qiniu

Tip: 这时候安装过程会出现一个错误.

doctrine / instantiator的安装请求(锁定在1.1.0) - >由doctrine / instantiator可以满足[1.1.0], 这个组件需要PHP ^7.1 版本, 所以我的版本不满足要求. 这时候安装doctrine/instantiator 即可, 在Packagist 上也能搜到, 作用是: 用于在不调用构造函数的情况下实例化PHP中的对象.

composer require doctrine/instantiator

会发现他给你倒退版本. 这时候再次安装itbdw/laravel-storage-qiniu 组件即可.

composer require itbdw/laravel-storage-qiniu

安装成功后, 会自动安装qiniu/php-sdk, 发现laravel/vendor 下有了itbdw, qiniu 两个文件夹.

四. 使用

a) itbdw/laravel-storage-qiniu

1. 在config/app.php里面的providers数组,加上一行

itbdw\QiniuStorage\QiniuFilesystemServiceProvider::class,

Tip: 这就相当于注册中间件一样, 告诉框架, 我在提供方里注册了一个新组件.

2. config/filesystem.php的里面disks数组加上:

'disks' => [

// 如果有多个 bucket,增加类似配置即可

'qiniu' => [

'driver' => 'qiniu',

'domain' => 'https://www.example.com',   //你的七牛域名,支持 http 和 https,也可以不带协议,默认 http

'access_key' => '',                       //AccessKey

'secret_key' => '',                       //SecretKey

'bucket'     => '',                      //Bucket名字

],

'qiniu_private' => [

'driver' => 'qiniu',

'domain' => 'https://www.example.com',    //你的七牛域名,支持 http 和 https,也可以不带协议,默认 http

'access_key'    => '',                         //AccessKey

'secret_key' => '',                            //SecretKey

'bucket' => 'qiniu_private',                 //Bucket名字

],

...

],

Tip: disks 数组里面有两个数组, 看名字也知道, 一个为正常情况下使用, 一个是私有的. 我只添加了一个通用的, 也就是第一个, 若有要保密的, 可用第二个.

. 在这里讲讲这几个参数.

'driver'  # 就不讲了, 默认qiniu

'domain' => 'https://www.example.com',

// 你的七牛域名,(支持 http 和 https,也可以不带协议,默认 http)

'access_key'   # 公钥

'secret_key'   # 密钥

'bucket'     # bucket 就是你空间的名字

3. itbdw/laravel-storage-qiniu 的使用不用引入命名空间, 直接使用. 其readme 中也有介绍方法, 两种, 但是可以结合用.

代码:

$disk     = \Storage::disk('qiniu');             // 使用七牛云上传

$time     = date('Y/m/d');

$filename = $disk->put($time, $request->file('file')); // 上传

$img_url  = $disk->downloadUrl($filename);  // 获取下载链接

打印一下获取的下载地址, 能看到说明已经上传成功了.

以你的域名和时间为前缀的图片地址就生成了, 这样你就可以以字符串的形式写入数据库, 引用的时候直接

4. qiniu/php-sdk

. 引入

在控制器中, use

use Qiniu\Storage\UploadManager;

use Qiniu\Auth;

在方法中

$file = $request->file('file');

// laravel 获取文件的信息, 若是平常PHP, 用$_FILES['file'].

$tmpPath  = $file->getRealPath();    // 获取图片在本地绝对路径

$ext      = $file->getClientOriginalExtension();

// 获取后缀名

$fileName = time() . rand(1000, 10000) . '.' . $ext;

// 拼接文件名

$accessKey = 'AccessKey';                        # 公钥

$secretKey = 'SecretKey';                                     # 私钥

$upManager = new UploadManager();

$auth    = new Auth($accessKey, $secretKey);

$token = $auth->uploadToken($bucketName);    # 上传空间名称

list($ret, $error) = $upManager->putFile($token, $fileName, $tmpPath);

Tip: 文档中用的是put, 但我试过用put 不成功, 改为putFile.

// 把参数依次传入, 上传后打印一下, 看到效果即成功.

if ($error !== null) {

dd($error);

} else {

dd($ret);

}

php文件上传七牛云,PHP 文件上传七牛云相关推荐

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

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

  2. java实现七牛云图片文件的上传

    java实现七牛云图片文件的上传 七牛云:https://portal.qiniu.com/create#resource 首先需要去注册一个账号实现实名认证 之后打开七牛云的 我们需要先创建一个储存 ...

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

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

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

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

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

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

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

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

  7. php大图片接口上传慢,七牛php sdk上传文件太慢

    问题描述 上传同一个文件(32kb)有时候需要2s,但有时候需要11s,上传速度太不稳定,且太慢. 上传的过程是由前端上传文件到后端php(使用yii2框架)的接口,由php调qiniu的sdk上传方 ...

  8. struts2 文件上传与下载 (初始文件上传的底层技术)——struts2第七讲

    2019独角兽企业重金招聘Python工程师标准>>> 文件上传 struts2 注:本文系作者在看了浪曦的风中叶老师的struts2视频的个人总结,希望能帮助广大struts2的初 ...

  9. web安全入门(第七章-1)文件上传漏洞--解析、验证、伪造

    一.客户端检测 1,客户端校验:一般是在网页上写一段Js脚本,用Js去检测,校验上传文件的后缀名,有白名单也有黑名单. 2,判断方式:通过抓包来判断,如果还未抓住包,就弹出不准上传,那么就是前端验证, ...

  10. 将 laravel 项目内静态文件,css、js、images 部署到七牛云 CDN

    项目升级,打算把 public 目录下的 css.js.image等文件,上传到七牛云,一直想搞来着,今天又想起来,正好 laravel 也从 5.2 升级到了 5.7,接下来把这边一搞,项目就更加优 ...

最新文章

  1. iOS WKWebView JS原生交互之JS调用OC(附demo)
  2. Uchome的登录验证机制
  3. C++ Primer 5th笔记(chap 16 模板和泛型编程)转发
  4. ​如何在图书馆收获一段爱情?​
  5. 数据集转换_为什么LSTM看起来那么复杂,以及如何避免时序数据的处理差异和混乱...
  6. “远程桌面己停止工作”的解决方法
  7. 特征筛选6——肯德尔相关系数筛选特征(单变量筛选)
  8. 惊!字节实习生竟干这事到凌晨三点
  9. Linux平台上的音视频互动开发平台
  10. eda多功能数字钟课程设计_EDA电子钟多功能数字时钟课程设计(含代码)[优秀]...
  11. 这些好玩的 GitHub 项目,你知道几个?
  12. 会让你变得与众不同的22个技巧
  13. 计算机音乐三只小熊,三只小熊教案音乐
  14. Linux系统快速查看CPU和内存使用情况,附各参数详解
  15. 阿里云MVP北京闭门会圆满落幕 多把“利剑”助力开发者破阵蜕变...
  16. After trying to increase PLL frequency, system shows the error: “Device may be operating in low-powe
  17. 中国篆刻艺术孙溟㠭作品《无有中无尽藏》
  18. 【第48题】实现一个冒泡排序
  19. 关于Visio的一些使用技巧
  20. 人生重开模拟器突然火爆 GitHub,赶紧来玩一玩

热门文章

  1. 奥黛丽.赫本的美丽之本
  2. LVS-------------------------------
  3. wikioi之1160 蛇形矩阵 之找规律
  4. C PUZZLE中的一道题
  5. css 文字过长 点点点显示
  6. iOS报 Expanded from macro ‘xxx‘
  7. 51单片机 01点亮小灯泡
  8. 概率统计Python计算:连续型随机向量边缘分布或条件分布概率计算
  9. 全景效果实现(Photo Sphere,photo-sphere-viewer全景虚拟漫游)
  10. Linux实现上传文件到百度网盘