php文件上传七牛云,PHP 文件上传七牛云
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 文件上传七牛云相关推荐
- 七牛云 vue 图片上传简单解说,js 上传文件图片
七牛云 vue 图片上传简单解说,js 上传文件图片 一.七牛云简介 首次使用七牛云存储进行项目的图片存储,整了一上午才整明白,这些官方的教程把明白人也给说糊涂了,文档很不规范. 七牛云有免费的使用额 ...
- java实现七牛云图片文件的上传
java实现七牛云图片文件的上传 七牛云:https://portal.qiniu.com/create#resource 首先需要去注册一个账号实现实名认证 之后打开七牛云的 我们需要先创建一个储存 ...
- 使用七牛云进行文件上传
目录 一.七牛云入门测试 1.注册七牛云账号,完成后选择对象存储 2.在里面创建空间,一个空间相当于一个文件夹,就是将对象上传到的地方 3.查看个人秘钥,注册完成账号后,会有一个秘钥,上传文件的时候进 ...
- (七牛云系列)七牛云指定文件上传路径(各种语言通用)
目录 解决方法 一个实例 解决方法 方法很简单 假如你有一个文件名为xxx.jpg 同时你在七牛云中有一个文件夹为cs 则你在上传文件时,需要将文件名修改为cs/xxx.jpg,七牛云会自动识别,并放 ...
- SpringBoot(24) 整合七牛云实现文件上传
一.前言 本文将基于springboot2.1.8.RELEASE整合七牛云实现文件上传 本文参考 https://www.keppel.fun/articles/2019/02/27/1551262 ...
- html七牛云图片文件上传,使用Js将文件图片视频上传到七牛云详细教程-Fun言
前言 因为项目需要,需要将一些较大文件上传到七牛云,以前都是通过数据流上传到服务端,然后在服务端进行上传操作,因为以前文件都很小所以无所谓,但是要是几百M的文件就不行了,所以就采用前端js直接上传到七 ...
- php大图片接口上传慢,七牛php sdk上传文件太慢
问题描述 上传同一个文件(32kb)有时候需要2s,但有时候需要11s,上传速度太不稳定,且太慢. 上传的过程是由前端上传文件到后端php(使用yii2框架)的接口,由php调qiniu的sdk上传方 ...
- struts2 文件上传与下载 (初始文件上传的底层技术)——struts2第七讲
2019独角兽企业重金招聘Python工程师标准>>> 文件上传 struts2 注:本文系作者在看了浪曦的风中叶老师的struts2视频的个人总结,希望能帮助广大struts2的初 ...
- web安全入门(第七章-1)文件上传漏洞--解析、验证、伪造
一.客户端检测 1,客户端校验:一般是在网页上写一段Js脚本,用Js去检测,校验上传文件的后缀名,有白名单也有黑名单. 2,判断方式:通过抓包来判断,如果还未抓住包,就弹出不准上传,那么就是前端验证, ...
- 将 laravel 项目内静态文件,css、js、images 部署到七牛云 CDN
项目升级,打算把 public 目录下的 css.js.image等文件,上传到七牛云,一直想搞来着,今天又想起来,正好 laravel 也从 5.2 升级到了 5.7,接下来把这边一搞,项目就更加优 ...
最新文章
- iOS WKWebView JS原生交互之JS调用OC(附demo)
- Uchome的登录验证机制
- C++ Primer 5th笔记(chap 16 模板和泛型编程)转发
- ​如何在图书馆收获一段爱情?​
- 数据集转换_为什么LSTM看起来那么复杂,以及如何避免时序数据的处理差异和混乱...
- “远程桌面己停止工作”的解决方法
- 特征筛选6——肯德尔相关系数筛选特征(单变量筛选)
- 惊!字节实习生竟干这事到凌晨三点
- Linux平台上的音视频互动开发平台
- eda多功能数字钟课程设计_EDA电子钟多功能数字时钟课程设计(含代码)[优秀]...
- 这些好玩的 GitHub 项目,你知道几个?
- 会让你变得与众不同的22个技巧
- 计算机音乐三只小熊,三只小熊教案音乐
- Linux系统快速查看CPU和内存使用情况,附各参数详解
- 阿里云MVP北京闭门会圆满落幕 多把“利剑”助力开发者破阵蜕变...
- After trying to increase PLL frequency, system shows the error: “Device may be operating in low-powe
- 中国篆刻艺术孙溟㠭作品《无有中无尽藏》
- 【第48题】实现一个冒泡排序
- 关于Visio的一些使用技巧
- 人生重开模拟器突然火爆 GitHub,赶紧来玩一玩