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. 手写数字识别 卷积神经网络 Pytorch框架实现

    MNIST 手写数字识别 卷积神经网络 Pytorch框架 谨此纪念刚入门的我在卷积神经网络上面的摸爬滚打 说明 下面代码是使用pytorch来实现的LeNet,可以正常运行测试,自己添加了一些注释, ...

  2. python笔记——dict和set

    学习廖雪峰python3笔记_dict和set dict__介绍 dict --> dictionary(字典)--> python内置 --> 使用键-值(key-value)存储 ...

  3. asp.net运行原理及机制

    当一个HTTP请求到服务器并被IIS接收到之后,IIS首先通过客户端请求的页面类型为其加载相应的.dll文件,然后在处理过程中将这条请求发送给能够处理这个请求的模块.在ASP.NET 3.5中,这个模 ...

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

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

  5. python virtualenv和virtualenv的使用

    首先下面的步骤我都是在windows下执行,Python2.7,pip==19.1.1 1.安装virtualenv pip install virtualenv 2.新建virtualenv vir ...

  6. java面试01-网络知识

    1.网络七层协议 第一层:物理层 机械.电子.定时接口通信信道上的原始比特流传输 第二层:数据链路层 物理寻址,同时将原始比特流转变为逻辑传输线路 第三层:网络层 控制子网的运行‘如逻辑编址.分组传输 ...

  7. putty ssh常用命令小结

    打开putty 输入VPS的IP地址输入root回车输入密码回车 vps 更改文件夹所属组 cd /home/vpsuser/domains/afish.cnblogs.com/ chown -R v ...

  8. 跳跃表-原理及Java实现

    跳跃表-原理及Java实现 引言: 上周现场面试阿里巴巴研发工程师终面,被问到如何让链表的元素查询接近线性时间.笔者苦思良久,缴械投降.面试官告知回去可以看一下跳跃表,遂出此文. 跳跃表的引入 我们知 ...

  9. ArrayList为什么是线程不安全的

    首先需要了解什么是线程安全:线程安全就是说多线程访问同一代码(对象.变量等),不会产生不确定的结果. 既然说ArrayList是线程不安全的,那么在多线程中操作一个ArrayList对象,则会出现不确 ...

  10. 一篇文章了解RPC框架原理

    1.RPC框架的概念 RPC(Remote Procedure Call)–远程过程调用,通过网络通信调用不同的服务,共同支撑一个软件系统,微服务实现的基石技术.使用RPC可以解耦系统,方便维护,同时 ...