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. BZOJ 1053 反素数 题解

    题面 引理1:  1~n中的最大反质数,就是1~n中约数个数最多的数中最小的一个(因为要严格保证g(x)>g(i)): 引理2:1~n中任何数的不同因子不会超过10个,因为他们的乘积大于2,00 ...

  2. PythonWeb框架Django搭建过程

    首先下载PyCharm专业版 破解地址:https://www.52pojie.cn/thread-997094-1-1.html 之后创建python虚拟环境(创建虚拟环境在上一篇博客) 激活虚拟环 ...

  3. 去除富文本中的html标签及vue、react、微信小程序中的过滤器

    在获取富文本后,又只要显示部分内容,需要去除富文本标签,然后再截取其中一部分内容:然后就是过滤器,在微信小程序中使用还是挺多次的,在vue及react中也遇到过 1.富文本去除html标签 去除htm ...

  4. 剑指offer-递归和循环-python

    -斐波那契数列- 大家都知道斐波那契数列(1.1.2.3.5.8.13.21.34.……),现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 斐波那契数 ...

  5. cx_Oracle 操作oracle数据库

    cx_Oracle 操作oracle数据库 class MyOracle(): def __init__(self, host_name="ip", port=1521, sid= ...

  6. Vue 小实例 - 组件化 、cli 工程化

    1. 组件化  (父子组件通信: 父 - 子 :props 数组           子 - 父  :  子层触发事件,调用  $emit 触发父层对应自定义事件,可函数处理传参 / $event 获 ...

  7. python-scp-上传文件到服务器

    python中使用scp,将文件上传到服务器 def ssh_scp_put(ip, username, password, local_file, remote_path): "" ...

  8. 用 C++ 模板元编程实现有限的静态 introspection

    C++ 中的奇技淫巧大部分来源于模板技术,尤其是模版元编程技术(Template Meta-Programming, TMP).TMP 通过将一部分计算任务放在编译时完成,不仅提高了程序的性能,还能让 ...

  9. Java基本的程序结构设计 数组

    声明数组: int[] a; int a[]; 两种方式.一般选择第一种,比较一目了然. 初始化,必须指定长度: int[] a = new int[10]; int[] a = {1,2,3}; 初 ...

  10. 跨站请求伪造CSRF:攻击与防御

    CSRF是什么         (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为&quo ...