阿里云OSS文件上传封装
1.先用composer安装阿里云OSS的PHPSDK

2.配置文件里定义阿里云OSS的秘钥

3.在index控制器里的代码封装
<?php namespace app\index\controller; use OSS\OssClient;
use OSS\Core\OssException;
use OSS\Core\OssUtil;
use think\Config; class Index extends Base
{
// 阿里OSS相关参数
protected $accessKeyId = '';
protected $accessKeySecret = '';
protected $endpoint = '';
protected $bucket = '';
// 文件上传相关设置
protected $image_size = ;
protected $video_size = ;
protected $other_size = ; /**
* 构造函数
*/
public function _initialize()
{
$this->accessKeyId = Config::get('aliyun_oss')['accessKeyId'];
$this->accessKeySecret = Config::get('aliyun_oss')['accessKeySecret'];
$this->endpoint = Config::get('aliyun_oss')['endpoint'];
$this->bucket = Config::get('aliyun_oss')['bucket'];
$this->image_size = Config::get('upload_set')['image_size'];
$this->video_size = Config::get('upload_set')['video_size'];
$this->other_size = Config::get('upload_set')['other_size'];
} /**
* 测试页面
*/
public function index()
{
return $this->fetch();
} /**
* 创建存储空间
*/
public function createBucket()
{
if (!request()->isPost()) {
throw new \think\Exception('请求方式错误!');
}
$bucket = input('param.bucket');
if (empty($bucket)) {
return json(['data' => '', 'code' => , 'message' => '存储空间名不能为空!']);
}
try {
$ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
$ossClient->createBucket($bucket);
return json(['data' => '', 'code' => , 'message' => $bucket . '存储空间创建成功']);
} catch (OssException $e) {
return json(['data' => $e->getMessage(), 'code' => , 'message' => '创建失败']);
}
} /**
* 上传文件
*/
public function uploadFile()
{
/*判断提交方式*/
if (!request()->isPost()) {
throw new \think\Exception('请求方式错误!');
}
/*获取到上传的文件*/
$file = $_FILES['file'];
if (!$file) {
return json(['data' => '', 'code' => , 'message' => '文件不存在!']);
}
// 判断文件大小
if ($file['size'] > $this->other_size) {
return json(['data' => '', 'code' => , 'message' => '文件大小不能超过' . ($this->other_size / / ) . 'M']);
}
$name = $file['name'];
$format = strrchr($name, '.');//截取文件后缀名如 (.jpg)
/*判断图片格式*/
$allow_type = ['.zip', '.rar', '.doc','.docx','xls','xlsx','mp3','wav'];
if (!in_array($format, $allow_type)) {
return json(['data' => '', 'code' => , 'message' => '文件格式不在允许范围内']);
}
// 尝试执行
try {
//实例化对象 将配置传入
$ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
//这里是有sha1加密 生成文件名 之后连接上后缀
$fileName = 'upload/file/' . date("Ymd") . '/' . sha1(date('YmdHis', time()) . uniqid()) . $format;
//执行阿里云上传
$result = $ossClient->uploadFile($this->bucket, $fileName, $file['tmp_name']);
/*组合返回数据*/
$arr = [
'oss_url' => $result['info']['url'], //上传资源地址
'relative_path' => $fileName //数据库保存名称(相对路径)
];
} catch (OssException $e) {
return json(['data' => $e->getMessage(), 'code' => , 'message' => '上传失败!']);
}
//将结果返回
return json(['data' => array('file' => $arr['oss_url']), 'code' => , 'message' => '成功上传到oss']);
} /**
* 上传视频
*/
public function uploadVideo()
{
/*判断提交方式*/
if (!request()->isPost()) {
throw new \think\Exception('请求方式错误!');
}
/*获取到上传的文件*/
$file = $_FILES['file'];
if (!$file) {
return json(['data' => '', 'code' => , 'message' => '文件不存在!']);
}
// 判断文件大小
if ($file['size'] > $this->video_size) {
return json(['data' => '', 'code' => , 'message' => '视频大小不能超过' . ($this->video_size / / ) . 'M']);
}
$name = $file['name'];
$format = strrchr($name, '.');//截取文件后缀名如 (.jpg)
/*判断图片格式*/
$allow_type = ['.mp4', '.avi', '.rmvb'];
if (!in_array($format, $allow_type)) {
return json(['data' => '', 'code' => , 'message' => '视频格式不在允许范围内']);
}
// 尝试执行
try {
//实例化对象 将配置传入
$ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
//这里是有sha1加密 生成文件名 之后连接上后缀
$fileName = 'upload/video/' . date("Ymd") . '/' . sha1(date('YmdHis', time()) . uniqid()) . $format;
//执行阿里云上传
$result = $ossClient->uploadFile($this->bucket, $fileName, $file['tmp_name']);
/*组合返回数据*/
$arr = [
'oss_url' => $result['info']['url'], //上传资源地址
'relative_path' => $fileName //数据库保存名称(相对路径)
];
} catch (OssException $e) {
return json(['data' => $e->getMessage(), 'code' => , 'message' => '上传失败!']);
}
//将结果返回
return json(['data' => array('file' => $arr['oss_url']), 'code' => , 'message' => '成功上传到oss']);
} /**
* 上传图片
*/
public function uploadImage()
{
/*判断提交方式*/
if (!request()->isPost()) {
throw new \think\Exception('请求方式错误!');
}
/*获取到上传的文件*/
$file = $_FILES['file'];
if (!$file) {
return json(['data' => '', 'code' => , 'message' => '文件不存在!']);
}
// 判断文件大小
if ($file['size'] > $this->image_size) {
return json(['data' => '', 'code' => , 'message' => '视频大小不能超过' . ($this->image_size / / ) . 'M']);
}
$name = $file['name'];
$format = strrchr($name, '.');//截取文件后缀名如 (.jpg)
/*判断图片格式*/
$allow_type = ['.jpg', '.jpeg', '.gif', '.bmp', '.png'];
if (!in_array($format, $allow_type)) {
return json(['data' => '', 'code' => , 'message' => '图片格式不在允许范围内']);
}
// 尝试执行
try {
//实例化对象 将配置传入
$ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
//这里是有sha1加密 生成文件名 之后连接上后缀
$fileName = 'upload/image/' . date("Ymd") . '/' . sha1(date('YmdHis', time()) . uniqid()) . $format;
//执行阿里云上传
$result = $ossClient->uploadFile($this->bucket, $fileName, $file['tmp_name']);
/*组合返回数据*/
$arr = [
'oss_url' => $result['info']['url'], //上传资源地址
'relative_path' => $fileName //数据库保存名称(相对路径)
];
} catch (OssException $e) {
return json(['data' => $e->getMessage(), 'code' => , 'message' => '上传失败!']);
}
//将结果返回
return json(['data' => array('file' => $arr['oss_url']), 'code' => , 'message' => '成功上传到oss']);
} /**
* 上传图片base64
*/
public function uploadImageBase64()
{
// 判断提交方式及图片类型
if (!request()->has('base64', 'post')) {
return json(['data' => '', 'code' => , 'message' => '请求方式错误,或图片非base64格式类型']);
}
$data = $_POST['base64'];
$result = $this->new_base64_upload($data);
if ($result['code'] !== ) {
return json(['data' => '', 'code' => , 'message' => $result['msg']]);
}
$fileResult = &$result['data'];
$filePath = $fileResult['path'] . $fileResult['name'];
$ossFileName = implode('/', ['upload/image', date('Ymd'), $fileResult['name']]);
try {
//实例化对象 将配置传入
$ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
$result = $ossClient->uploadFile($this->bucket, $ossFileName, $filePath);
$arr = [
'oss_url' => $result['info']['url'], //上传资源地址
'relative_path' => $ossFileName //数据库保存名称(相对路径)
];
} catch (OssException $e) {
return json(['data' => $e->getMessage(), 'code' => , 'message' => '上传失败']);
}
unlink($filePath);
return json(['data' => array('file' => $arr['oss_url']), 'code' => , 'message' => '成功上传到oss']);
} /**
* 将Base64数据转换成二进制并存储到指定路径
*/
protected function new_base64_upload($base64, $image_path = 'upload/posts/')
{
$data = explode(',', $base64);
trace($data, 'api');
unset($base64);
if (count($data) !== ) {
return ['code' => , 'msg' => '文件格式错误'];
}
if (!preg_match('/^(data:\s*image\/(\w+);base64)/', $data[], $result)) {
return ['code' => , 'msg' => '文件格式错误'];
}
$type = $result[];
if (!in_array($type, array('jpeg', 'jpg', 'gif', 'bmp', 'png'))) {
return ['code' => , 'msg' => '文件格式不在允许范围内'];
}
$image_name = md5(uniqid()) . '.' . $result[];
$image_file = $image_path . $image_name;
//服务器文件存储路径
try {
if (file_put_contents($image_file, base64_decode($data[]))) {
return ['code' => , 'msg' => '成功', 'data' => ['name' => $image_name, 'path' => $image_path]];
} else {
return ['code' => , 'msg' => '文件保存失败'];
}
} catch (\Exception $e) {
$msg = $e->getMessage();
return ['code' => , 'msg' => $msg];
}
}
}
阿里云OSS文件上传封装的更多相关文章
- 构建基于阿里云OSS文件上传服务
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...
- 记一次阿里云oss文件上传服务假死
引言 记得以前刚开始学习web项目的时候,经常涉及到需要上传图片啥的,那时候都是把图片上传到当前项目文件夹下面,每次项目一重启图片就丢了.虽然可以通过修改/tomcat/conf/server.xml ...
- PHP实现阿里云OSS文件上传(支持批量)
上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下: 1.下载阿里云OSS对象上传SDK(P ...
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...
- php阿里云oss文件上传
php的文件上传 文件上传 php的文件上传放在了$_FILES数组里,单文件和多文件上传的区别在于$_FILES['userfile']['name']是否为数组, 不熟悉的可以读一下官方文档 单文 ...
- 记录-阿里云Oss文件上传
public class OssUtil { /** * 上传图片 * @param file * @param request * @return */ public static Map<S ...
- Thinkphp整合阿里云OSS图片上传实例
Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...
- SpringBoot完美配置阿里云的文件上传
新建一个config类 AliyunOSS.java @Configuration @Data public class AliyunOSS { private OSSClient ossClient ...
- 阿里云OSS图片上传类
1.阿里云基本函数 /** * 把本地变量的内容到文件 * 简单上传,上传指定变量的内存值作为object的内容 */ public function putObject($imgPath,$obje ...
随机推荐
- C语言 --- 函数指针(初级)
1.函数指针:指向函数的指针变量. 函数在内存中也是有地址的,函数名代表函数的内存地址. 例子:函数:int sum(int a,int b); int ...
- tp5后台同步更新配置文件
thinkphp5 配置文件路径:app/extra/web.php public function add(){ $path = 'app/extra/web.php'; $file = inclu ...
- hibernate update-->参数绑定
Hibernate 更新数据库 参数绑定总结: 一.query.setParameter(属性名,真实值,类型); String hql="update User u set u.userN ...
- python-day13(正式学习)
闭包函数 闭包 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用).闭包指的是:函数内部函数对外部作用域而非全局作用域的引用. 额...这里提示一下闭包!=自 ...
- JS拖拽系列--多元素拖拽,面向对象,es6拖拽
最近不太忙,终于有时间,研究了一下早就想搞定的拖拽系列,先是写了面向过程式的,再做一个面向对象的,再顺便弄弄继承,最后玩一下ES6的class 不觉用了一天多,收获很大.拖拽弄完,想再弄一个拖放. ...
- NOIP2017 时间复杂度 大模拟
再写一道大模拟题. 由于是限时写的,相当于考场代码,乱的一批. 题目链接:P3952 时间复杂度 先记几个教训: 字符串形式的数字比较大小老老实实写函数,字典序都搞错几次了 栈空的时候不但pop()会 ...
- js事件冒泡、阻止事件冒泡以及阻止默认行为
事件冒泡 当事件发生后,这个事件就要开始传播(从里到外或者从外向里).为什么要传播呢?因为事件源本身(可能)并没有处理事件的能力,即处理事件的函数(方法)并未绑定在该事件源上.例如我们点击一个按钮时, ...
- WPF中的Stretch属性
有时候我们在WPF程序中设置了图片的Width和Height,但图片显示出来的宽和高并不是我们预期的效果,这实际上是由于Image的默认Stretch属性导致的 Image的Stretch属性默认为U ...
- k8s第一个脚本:hello world
1.hello-world-pod.yaml 脚本: # cat hello-world-pod.yaml apiVersion: v1 kind: Pod metadata: name: hello ...
- Azure云服务托管恶意软件
微软Azure云服务被用于托管恶意软件,可控制多达90台电脑 BleepingComputer称,在早期报道中,5月份陆续出现了两起与Azure相关的恶意软件攻击事件: 1.自5月10日以来,Azur ...