1.先用composer安装阿里云OSS的PHPSDK

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

3.在index控制器里的代码封装

  1. <?php
  2.  
  3. namespace app\index\controller;
  4.  
  5. use OSS\OssClient;
  6. use OSS\Core\OssException;
  7. use OSS\Core\OssUtil;
  8. use think\Config;
  9.  
  10. class Index extends Base
  11. {
  12. // 阿里OSS相关参数
  13. protected $accessKeyId = '';
  14. protected $accessKeySecret = '';
  15. protected $endpoint = '';
  16. protected $bucket = '';
  17. // 文件上传相关设置
  18. protected $image_size = ;
  19. protected $video_size = ;
  20. protected $other_size = ;
  21.  
  22. /**
  23. * 构造函数
  24. */
  25. public function _initialize()
  26. {
  27. $this->accessKeyId = Config::get('aliyun_oss')['accessKeyId'];
  28. $this->accessKeySecret = Config::get('aliyun_oss')['accessKeySecret'];
  29. $this->endpoint = Config::get('aliyun_oss')['endpoint'];
  30. $this->bucket = Config::get('aliyun_oss')['bucket'];
  31. $this->image_size = Config::get('upload_set')['image_size'];
  32. $this->video_size = Config::get('upload_set')['video_size'];
  33. $this->other_size = Config::get('upload_set')['other_size'];
  34. }
  35.  
  36. /**
  37. * 测试页面
  38. */
  39. public function index()
  40. {
  41. return $this->fetch();
  42. }
  43.  
  44. /**
  45. * 创建存储空间
  46. */
  47. public function createBucket()
  48. {
  49. if (!request()->isPost()) {
  50. throw new \think\Exception('请求方式错误!');
  51. }
  52. $bucket = input('param.bucket');
  53. if (empty($bucket)) {
  54. return json(['data' => '', 'code' => , 'message' => '存储空间名不能为空!']);
  55. }
  56. try {
  57. $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
  58. $ossClient->createBucket($bucket);
  59. return json(['data' => '', 'code' => , 'message' => $bucket . '存储空间创建成功']);
  60. } catch (OssException $e) {
  61. return json(['data' => $e->getMessage(), 'code' => , 'message' => '创建失败']);
  62. }
  63. }
  64.  
  65. /**
  66. * 上传文件
  67. */
  68. public function uploadFile()
  69. {
  70. /*判断提交方式*/
  71. if (!request()->isPost()) {
  72. throw new \think\Exception('请求方式错误!');
  73. }
  74. /*获取到上传的文件*/
  75. $file = $_FILES['file'];
  76. if (!$file) {
  77. return json(['data' => '', 'code' => , 'message' => '文件不存在!']);
  78. }
  79. // 判断文件大小
  80. if ($file['size'] > $this->other_size) {
  81. return json(['data' => '', 'code' => , 'message' => '文件大小不能超过' . ($this->other_size / / ) . 'M']);
  82. }
  83. $name = $file['name'];
  84. $format = strrchr($name, '.');//截取文件后缀名如 (.jpg)
  85. /*判断图片格式*/
  86. $allow_type = ['.zip', '.rar', '.doc','.docx','xls','xlsx','mp3','wav'];
  87. if (!in_array($format, $allow_type)) {
  88. return json(['data' => '', 'code' => , 'message' => '文件格式不在允许范围内']);
  89. }
  90. // 尝试执行
  91. try {
  92. //实例化对象 将配置传入
  93. $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
  94. //这里是有sha1加密 生成文件名 之后连接上后缀
  95. $fileName = 'upload/file/' . date("Ymd") . '/' . sha1(date('YmdHis', time()) . uniqid()) . $format;
  96. //执行阿里云上传
  97. $result = $ossClient->uploadFile($this->bucket, $fileName, $file['tmp_name']);
  98. /*组合返回数据*/
  99. $arr = [
  100. 'oss_url' => $result['info']['url'], //上传资源地址
  101. 'relative_path' => $fileName //数据库保存名称(相对路径)
  102. ];
  103. } catch (OssException $e) {
  104. return json(['data' => $e->getMessage(), 'code' => , 'message' => '上传失败!']);
  105. }
  106. //将结果返回
  107. return json(['data' => array('file' => $arr['oss_url']), 'code' => , 'message' => '成功上传到oss']);
  108. }
  109.  
  110. /**
  111. * 上传视频
  112. */
  113. public function uploadVideo()
  114. {
  115. /*判断提交方式*/
  116. if (!request()->isPost()) {
  117. throw new \think\Exception('请求方式错误!');
  118. }
  119. /*获取到上传的文件*/
  120. $file = $_FILES['file'];
  121. if (!$file) {
  122. return json(['data' => '', 'code' => , 'message' => '文件不存在!']);
  123. }
  124. // 判断文件大小
  125. if ($file['size'] > $this->video_size) {
  126. return json(['data' => '', 'code' => , 'message' => '视频大小不能超过' . ($this->video_size / / ) . 'M']);
  127. }
  128. $name = $file['name'];
  129. $format = strrchr($name, '.');//截取文件后缀名如 (.jpg)
  130. /*判断图片格式*/
  131. $allow_type = ['.mp4', '.avi', '.rmvb'];
  132. if (!in_array($format, $allow_type)) {
  133. return json(['data' => '', 'code' => , 'message' => '视频格式不在允许范围内']);
  134. }
  135. // 尝试执行
  136. try {
  137. //实例化对象 将配置传入
  138. $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
  139. //这里是有sha1加密 生成文件名 之后连接上后缀
  140. $fileName = 'upload/video/' . date("Ymd") . '/' . sha1(date('YmdHis', time()) . uniqid()) . $format;
  141. //执行阿里云上传
  142. $result = $ossClient->uploadFile($this->bucket, $fileName, $file['tmp_name']);
  143. /*组合返回数据*/
  144. $arr = [
  145. 'oss_url' => $result['info']['url'], //上传资源地址
  146. 'relative_path' => $fileName //数据库保存名称(相对路径)
  147. ];
  148. } catch (OssException $e) {
  149. return json(['data' => $e->getMessage(), 'code' => , 'message' => '上传失败!']);
  150. }
  151. //将结果返回
  152. return json(['data' => array('file' => $arr['oss_url']), 'code' => , 'message' => '成功上传到oss']);
  153. }
  154.  
  155. /**
  156. * 上传图片
  157. */
  158. public function uploadImage()
  159. {
  160. /*判断提交方式*/
  161. if (!request()->isPost()) {
  162. throw new \think\Exception('请求方式错误!');
  163. }
  164. /*获取到上传的文件*/
  165. $file = $_FILES['file'];
  166. if (!$file) {
  167. return json(['data' => '', 'code' => , 'message' => '文件不存在!']);
  168. }
  169. // 判断文件大小
  170. if ($file['size'] > $this->image_size) {
  171. return json(['data' => '', 'code' => , 'message' => '视频大小不能超过' . ($this->image_size / / ) . 'M']);
  172. }
  173. $name = $file['name'];
  174. $format = strrchr($name, '.');//截取文件后缀名如 (.jpg)
  175. /*判断图片格式*/
  176. $allow_type = ['.jpg', '.jpeg', '.gif', '.bmp', '.png'];
  177. if (!in_array($format, $allow_type)) {
  178. return json(['data' => '', 'code' => , 'message' => '图片格式不在允许范围内']);
  179. }
  180. // 尝试执行
  181. try {
  182. //实例化对象 将配置传入
  183. $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
  184. //这里是有sha1加密 生成文件名 之后连接上后缀
  185. $fileName = 'upload/image/' . date("Ymd") . '/' . sha1(date('YmdHis', time()) . uniqid()) . $format;
  186. //执行阿里云上传
  187. $result = $ossClient->uploadFile($this->bucket, $fileName, $file['tmp_name']);
  188. /*组合返回数据*/
  189. $arr = [
  190. 'oss_url' => $result['info']['url'], //上传资源地址
  191. 'relative_path' => $fileName //数据库保存名称(相对路径)
  192. ];
  193. } catch (OssException $e) {
  194. return json(['data' => $e->getMessage(), 'code' => , 'message' => '上传失败!']);
  195. }
  196. //将结果返回
  197. return json(['data' => array('file' => $arr['oss_url']), 'code' => , 'message' => '成功上传到oss']);
  198. }
  199.  
  200. /**
  201. * 上传图片base64
  202. */
  203. public function uploadImageBase64()
  204. {
  205. // 判断提交方式及图片类型
  206. if (!request()->has('base64', 'post')) {
  207. return json(['data' => '', 'code' => , 'message' => '请求方式错误,或图片非base64格式类型']);
  208. }
  209. $data = $_POST['base64'];
  210. $result = $this->new_base64_upload($data);
  211. if ($result['code'] !== ) {
  212. return json(['data' => '', 'code' => , 'message' => $result['msg']]);
  213. }
  214. $fileResult = &$result['data'];
  215. $filePath = $fileResult['path'] . $fileResult['name'];
  216. $ossFileName = implode('/', ['upload/image', date('Ymd'), $fileResult['name']]);
  217. try {
  218. //实例化对象 将配置传入
  219. $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
  220. $result = $ossClient->uploadFile($this->bucket, $ossFileName, $filePath);
  221. $arr = [
  222. 'oss_url' => $result['info']['url'], //上传资源地址
  223. 'relative_path' => $ossFileName //数据库保存名称(相对路径)
  224. ];
  225. } catch (OssException $e) {
  226. return json(['data' => $e->getMessage(), 'code' => , 'message' => '上传失败']);
  227. }
  228. unlink($filePath);
  229. return json(['data' => array('file' => $arr['oss_url']), 'code' => , 'message' => '成功上传到oss']);
  230. }
  231.  
  232. /**
  233. * 将Base64数据转换成二进制并存储到指定路径
  234. */
  235. protected function new_base64_upload($base64, $image_path = 'upload/posts/')
  236. {
  237. $data = explode(',', $base64);
  238. trace($data, 'api');
  239. unset($base64);
  240. if (count($data) !== ) {
  241. return ['code' => , 'msg' => '文件格式错误'];
  242. }
  243. if (!preg_match('/^(data:\s*image\/(\w+);base64)/', $data[], $result)) {
  244. return ['code' => , 'msg' => '文件格式错误'];
  245. }
  246. $type = $result[];
  247. if (!in_array($type, array('jpeg', 'jpg', 'gif', 'bmp', 'png'))) {
  248. return ['code' => , 'msg' => '文件格式不在允许范围内'];
  249. }
  250. $image_name = md5(uniqid()) . '.' . $result[];
  251. $image_file = $image_path . $image_name;
  252. //服务器文件存储路径
  253. try {
  254. if (file_put_contents($image_file, base64_decode($data[]))) {
  255. return ['code' => , 'msg' => '成功', 'data' => ['name' => $image_name, 'path' => $image_path]];
  256. } else {
  257. return ['code' => , 'msg' => '文件保存失败'];
  258. }
  259. } catch (\Exception $e) {
  260. $msg = $e->getMessage();
  261. return ['code' => , 'msg' => $msg];
  262. }
  263. }
  264. }

阿里云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. php中文网--JavaScript

    PHP中文网:http://www.php.cn/course/18.html 常用的两个客户端输出方法 document.write("你好呀js"); 描述:在网页的<b ...

  2. google浏览器切换成中文

    新浪下载地址:http://down.tech.sina.com.cn/content/40975.html 默认字体好像是西班牙语 1.浏览器地址chrome://settings/language ...

  3. Mac中如何查看电脑的IP地址

    方法一:使用ifconfig命令 方法二:在charles中查看 Charles 的顶部菜单的 “Help”->”Local IP Address”,即可在弹出的对话框中看到 IP 地址,如下图 ...

  4. AStar 启发函数设计(老物)

    作为我出山的第一篇日志,怎么也得写篇对得起我身份和地位的文章吧? 先容我吐槽一下不小心发的贴图,那个只是我不小心收藏了隔壁兄弟班的课表就别大家这么热情的 BB 我感到很有压力,额,废话不多说,立刻进入 ...

  5. 定位class时空格注意

    class属性中间的空格并不是空字符串,那是间隔符号,表示的是一个元素有多个class的属性名称,那定位的时候取其中的一个就行(并且要唯一) Selenium2+python自动化73-定位的坑:cl ...

  6. 剑指offer-2:斐波那契数列

    二.斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 1.递归法 1). 分析 斐波那契数列的标准公式为 ...

  7. FP Style 的快排

    const quickSort = (list) => { if (!list || !list.length) return []; if (list.length === 1) return ...

  8. xml发post请求

    # python3字符串换行,在右边加个反斜杠 body = '<?xml version="1.0" encoding = "UTF-8"?>' ...

  9. [POJ1664]放苹果(动态规划)

    [POJ1664]放苹果 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第 ...

  10. hdu 1003 最大连续子串

    #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #defin ...