阿里云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 ...
随机推荐
- php中文网--JavaScript
PHP中文网:http://www.php.cn/course/18.html 常用的两个客户端输出方法 document.write("你好呀js"); 描述:在网页的<b ...
- google浏览器切换成中文
新浪下载地址:http://down.tech.sina.com.cn/content/40975.html 默认字体好像是西班牙语 1.浏览器地址chrome://settings/language ...
- Mac中如何查看电脑的IP地址
方法一:使用ifconfig命令 方法二:在charles中查看 Charles 的顶部菜单的 “Help”->”Local IP Address”,即可在弹出的对话框中看到 IP 地址,如下图 ...
- AStar 启发函数设计(老物)
作为我出山的第一篇日志,怎么也得写篇对得起我身份和地位的文章吧? 先容我吐槽一下不小心发的贴图,那个只是我不小心收藏了隔壁兄弟班的课表就别大家这么热情的 BB 我感到很有压力,额,废话不多说,立刻进入 ...
- 定位class时空格注意
class属性中间的空格并不是空字符串,那是间隔符号,表示的是一个元素有多个class的属性名称,那定位的时候取其中的一个就行(并且要唯一) Selenium2+python自动化73-定位的坑:cl ...
- 剑指offer-2:斐波那契数列
二.斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 1.递归法 1). 分析 斐波那契数列的标准公式为 ...
- FP Style 的快排
const quickSort = (list) => { if (!list || !list.length) return []; if (list.length === 1) return ...
- xml发post请求
# python3字符串换行,在右边加个反斜杠 body = '<?xml version="1.0" encoding = "UTF-8"?>' ...
- [POJ1664]放苹果(动态规划)
[POJ1664]放苹果 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第 ...
- hdu 1003 最大连续子串
#include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #defin ...