ThinkPHP3.2 实现阿里云OSS上传文件

为什么80%的码农都做不了架构师?>>>   hot3.png

0、配置文件Config,加入OSS配置选项,设置php.ini最大上传大小(自行解决,这里不做演示)

'OSS' => array('ACCESS_KEY_ID' => '**************', //从OSS获得的AccessKeyId'ACCESS_KEY_SECRET' => '**************', //从OSS获得的AccessKeySecret'ENDPOINT' => 'oss-cn-beijing.aliyuncs.com', //您选定的OSS数据中心访问域名,例如oss-cn-hangzhou.aliyuncs.com'BUCKET'=>'ycwlwhg'),

1、index.html

<form action="{:U('Home/Oss/post')}" method="post" enctype="multipart/form-data"><input type="text" name="dir" placeholder="文件夹"><input type="file" name="file[]" multiple /><input type="submit" value="上传"></form>

2、下载阿里云OSS的PHPSDK ,放置于ThinkPHP/Library/Vendor/下,起名叫OSS,图示

191837_xKfN_3578722.png

3、上传类

 

<?phpnamespace Home\Controller;use OSS\Core\OssException;
use OSS\OssClient;
use Think\Controller;class OssController extends Controller
{public function index(){$this->display();}//获取文件名//true 文件名  false后缀function retrieve($file, $type = true){$arr = explode('.', $file);if ($type) {return $arr[0];} else {return $arr[1];}}function Directory($dir){if (is_dir($dir) || @mkdir($dir, 0777)) { //查看目录是否已经存在或尝试创建,加一个@抑制符号是因为第一次创建失败,会报一个“父目录不存在”的警告。//echo $dir . "创建成功<br>";  //输出创建成功的目录} else {$dirArr = explode('/', $dir); //当子目录没创建成功时,试图创建父目录,用explode()函数以'/'分隔符切割成一个数组array_pop($dirArr); //将数组中的最后一项(即子目录)弹出来,$newDir = implode('/', $dirArr); //重新组合成一个文件夹字符串$this->Directory($newDir); //试图创建父目录@mkdir($dir, 0777);}}public function post(){//要上传至OSS的文件夹路径  如  dir/dir1/dir2$dir                = I('dir');$upload             = new \Think\Upload();// 实例化上传类$upload->maxSize    = 3145728;// 设置附件上传大小$upload->rootPath   = './Public/'; // 设置附件上传根目录$upload->savePath   = '/uploads/'; // 设置附件上传(子)目录vendor('OSS.autoload');$ossConfig          = C('OSS');$accessKeyId        = $ossConfig['ACCESS_KEY_ID'];//阿里云OSS  ID$accessKeySecret    = $ossConfig['ACCESS_KEY_SECRET'];//阿里云OSS 秘钥$endpoint           = $ossConfig['ENDPOINT'];//阿里云OSS 地址$ossClient          = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);$bucket             = $ossConfig['BUCKET']; //oss中的文件上传空间$info               = $upload->upload();if (!$info) {// 上传错误提示错误信息//处理上传错误信息$this->error($upload->getError());} else {// 上传成功foreach ($info as $k => $v){$object     = $dir . '/' . $v['name'];//想要保存文件的名称//这个数组是存上传成功以后返回的访问路径,多文件时使用implode函数将其组合$downlink[] = $bucket.'.'.$endpoint.'/'.$object;$file       = './Public' . $info[$k]['savepath'] . $v['savename'];//本地文件路径try {$ossClient->uploadFile($bucket, $object, $file);//上传成功//这里可以删除上传到本地的文件。unlink($file);} catch (OssException $e) {//上传失败printf($e->getMessage() . "\n");return;}}}}}

 

转载于:https://my.oschina.net/marhal/blog/1787086

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ipad和iphone切图_如何在iPhone,iPad和Mac上签名PDF

ipad和iphone切图Khamosh PathakKhamosh PathakDo you have documents to sign? You don’t need to worry about printing, scanning, or even downloading a third-party app. You can sign PDFs right on your iPhone, iPad, and Mac. 你有文件要签名吗&#xff1f; 您无需…

在Ubuntu服务器上打开第二个控制台会话

Ubuntu Server has the native ability to run multiple console sessions from the server console prompt. If you are working on the actual console and are waiting for a long running command to finish, there’s no reason why you have to sit and wait… you can j…

Cloudstack系统配置(三)

系统配置 CloudStack提供一个基于web的UI&#xff0c;管理员和终端用户能够使用这个界面。用户界面版本依赖于登陆时使用的凭证不同而不同。用户界面是适用于大多数流行的浏览器包括IE7,IE8,IE9,Firefox Chrome等。URL是:(用你自己的管理控制服务器IP地址代替) 1http://<ma…

如何在Chrome工具栏中固定和取消固定扩展程序

Not all extensions are made equal. Some extensions, like Grammarly, work quietly in the background and don’t need an icon in the Chrome toolbar. Here’s how to pin and unpin extensions for a cleaner Chrome toolbar. 并非所有扩展名都相等。 某些扩展程序(例如…

vim编辑器快捷操作

1、查找 进入编辑器 按下 / 进行查找&#xff0c;回跳到第一个匹配的值&#xff0c;按下n查找下一个 N返回查看上一个 也可根据正则进行查找 2、替换 &#xff1a;s/a/b/g 当前行替换 &#xff1a;%s/a/b/g 全文替换 &#xff1a;5,10s/a/b/g 区域替换: .,2s/foo/bar/g 当…

react-navigation 跨 tabs 返回首页

2019独角兽企业重金招聘Python工程师标准>>> react-navigation 跨 tabs 返回首页 import { NavigationActions } from react-navigation;const navigationAction NavigationActions.reset({ index: 0,actions: [ NavigationActions.navigate({ routeName: RootTab…

ubuntu 默认命令行_从命令行在Ubuntu上设置默认浏览器

ubuntu 默认命令行Ubuntu Linux has a default browser functionality that will automatically launch the correct browser when clicking on a link in a gnome gui application. It’s easy enough to set the default browser using the GUI tools, but sometimes it’s e…

ThreadLocal就是这么简单

前言 今天要研究的是ThreadLocal&#xff0c;这个我在一年前学习JavaWeb基础的时候接触过一次&#xff0c;当时在baidu搜出来的第一篇博文ThreadLocal&#xff0c;在评论下很多开发者认为那博主理解错误&#xff0c;给出了很多有关的链接来指正(可原博主可能没上博客了&#xf…

如何在Twitch上设置捐款

Many people on Twitch stream as a hobby. If you’re thinking about going full-time, though, you’ll need to raise some cash. Setting up donations on Twitch is one way you can do it! Twitch上的许多人都将其作为爱好。 但是&#xff0c;如果您打算全职工作&#x…

JAVA-Concurrency之CountDownLatch说明

2019独角兽企业重金招聘Python工程师标准>>> As per java docs, CountDownLatch is a synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes. CountDownLatch concept is very comm…

设置微软应用商店的代理_如何设置和使用Microsoft家庭安全应用

设置微软应用商店的代理The Microsoft Family Safety app provides a set of reporting and parental control tools for people with Microsoft accounts. With filtering controls, location reporting, and app-usage recording, this app gives parents a way to monitor t…

Linux跨平台远程控制

转载于:https://blog.51cto.com/13660858/2094987

Zoom Host可以真正看到您的所有私人消息吗?

Girts Ragelis/Shutterstock.comGirts Ragelis / Shutterstock.comViral social media posts are alleging that Zoom’s private messages aren’t really private—if you’re chatting privately during a Zoom meeting, the host can see your entire conversation. Is tha…

使用Keras进行深度学习:(三)使用text-CNN处理自然语言(上)

欢迎大家关注我们的网站和系列教程&#xff1a;http://www.tensorflownews.com/&#xff0c;学习更多的机器学习、深度学习的知识&#xff01; 上一篇文章中一直围绕着CNN处理图像数据进行讲解&#xff0c;而CNN除了处理图像数据之外&#xff0c;还适用于文本分类。CNN模型首次…

powerpoint转换器_如何将PowerPoint演示文稿转换为主题演讲

powerpoint转换器If someone sends you a Microsoft PowerPoint presentation, but you’d rather use Apple’s presentation software, Keynote, you’re in luck! Apple’s done all the hard work for you. Here’s how to convert a PowerPoint presentation to Keynote. …

Android高仿大众点评(带服务端)

2019独角兽企业重金招聘Python工程师标准>>> 实例讲解了一个类似大众点评的项目&#xff0c;项目包含服务端和android端源码, 服务端为php代码&#xff0c;如果没有接触过php, 文章中讲解一键部署php的方法&#xff0c;让您5分钟将服务端搭建成功, 您也可以将php换成…

vista任务栏透明_在Windows XP中获取Vista任务栏缩略图预览

vista任务栏透明It was only a matter of time before people started cloning Windows Vista features and adding them into Windows XP. One of my favorite Vista features is the thumbnails that popup when you mouse over the taskbar. And now I can use them in XP a…

Spring实战Day2

创建对象之后如何体现对象之间的依赖&#xff1f; Spring容器负责创建Bean和依赖注入&#xff0c;那么Spring是怎么将Bean装配在一起的呢&#xff1f; Spring提供了三种方式装配机制 1.隐式的bean发现机制和自动装配 图一图二&#xff0c;是两个组件与Config类同包 图三&#x…

Git的状态转换

近期公司用Git来管理代码&#xff0c;用起来是要比svn爽一些。就是刚接触的时候比較痛苦&#xff0c;特别是那些状态(版本号的提交/合并/回退)。差点把我搞晕了。如今回过头来总结一下&#xff0c;就清楚多了。 就本地仓库来看。Git能够分成5个不同的状态。能够通过$ git statu…

RN自定义组件封装 - 播放类似PPT动画

1. 前言 近日&#xff0c;被安排做一个开场动画的任务。虽然RN提供了Animated来自定义动画&#xff0c;但是本次动画中的元素颇多&#xff0c;交互甚烦。。。在完成任务的同时&#xff0c;发现很多步骤其实是重复的&#xff0c;于是封装了一个小组件记录一下&#xff0c;分享给…