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文件上传封装的更多相关文章

  1. 构建基于阿里云OSS文件上传服务

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...

  2. 记一次阿里云oss文件上传服务假死

    引言 记得以前刚开始学习web项目的时候,经常涉及到需要上传图片啥的,那时候都是把图片上传到当前项目文件夹下面,每次项目一重启图片就丢了.虽然可以通过修改/tomcat/conf/server.xml ...

  3. PHP实现阿里云OSS文件上传(支持批量)

    上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下:   1.下载阿里云OSS对象上传SDK(P ...

  4. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  5. php阿里云oss文件上传

    php的文件上传 文件上传 php的文件上传放在了$_FILES数组里,单文件和多文件上传的区别在于$_FILES['userfile']['name']是否为数组, 不熟悉的可以读一下官方文档 单文 ...

  6. 记录-阿里云Oss文件上传

    public class OssUtil { /** * 上传图片 * @param file * @param request * @return */ public static Map<S ...

  7. Thinkphp整合阿里云OSS图片上传实例

    Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...

  8. SpringBoot完美配置阿里云的文件上传

    新建一个config类 AliyunOSS.java @Configuration @Data public class AliyunOSS { private OSSClient ossClient ...

  9. 阿里云OSS图片上传类

    1.阿里云基本函数 /** * 把本地变量的内容到文件 * 简单上传,上传指定变量的内存值作为object的内容 */ public function putObject($imgPath,$obje ...

随机推荐

  1. C++中函数模板的概念和意义

    1,对泛型编程进行学习,泛型编程是实际工程开发中必用的技术,大型公司的通用 库都是采用泛型编程的技术完成的,C++ 中支持泛型编程技术,C++ 中的函数  模板和类模板就是 C++ 中泛型编程技术,本 ...

  2. P5596 洛谷月赛 题 题解

    因为a>=0,b>=0,所以y^2-x^2>=0,所以y>x,因为都是自然数设y=x+k,化简得x=b-k^2/2*k-a;可知x仅当b-k^2%2*k-a==0且b-k^2与 ...

  3. python爬虫常用第三方库

    这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pycurl). pycurl – 网络 ...

  4. day 15 模块 相对导入

    自定义模块: 什么是模块:本质就是.py文件,封装语句的最小单位. 自定义模块:实际上就是定义.py,其中可以包含:变量定义,可执行语句,for循环,函数定义等等,他们统称模块的成员. 模块的运行方式 ...

  5. Linux的环境变量.bash_profile .bashrc profile文件

    Shell变量有局部变量.环境变量之分.局部变量就是指在某个Shell中生效的变量,只在此次登录中有效.环境变量通常又称“全局变量”,虽然在Shell中变量默认就是全局的,但是为了让子Shall继承当 ...

  6. elasticsearch系列一elasticsearch(ES简介、安装&配置、集成Ikanalyzer)

    一.ES简介 1. ES是什么? Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上 用 Java 编写的,它的内部使用 Lucene 做索引 ...

  7. Linux文档整理之【Jenkins+Docker自动化部署.Net Core】

    这次整理的文档是Jenkins+Docker实现自动化部署,很早之前就写的,今天有时间就搬到博客园做个记录. Jenkins是基于Java开发的一种持续集成工具,主要用于持续.自动的构建/测试软件等相 ...

  8. 剑指offer-1:旋转数组的最小数字

    旋转数组的最小数字1.题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2 ...

  9. 第98:svd原理

    SVD分解:任何矩阵都可以分解成第一行的形式,3个相乘.UV都是正交矩阵,中间的是奇异值. 3个相乘的形式可以拆分.即奇异值*第一行*第一列.在相加. 奇异值有时很小,在这种情况下,丢掉,可以减少计算 ...

  10. sed 删除用法

    sed ‘1,4d’ dataf1 #把第一行到第四行删除,并且显示剩下的内容 sed ‘/La/d’ dataf2 #把含有 La 的行删除 sed ‘/La/!d`’#把不含 La 的行删除,!是 ...