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; 您无需…

一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给用户更好的体验。...

a. 图片懒加载&#xff0c;滚动到相应位置才加载图片。 b. 图片预加载&#xff0c;如果为幻灯片、相册等&#xff0c;将当前展示图片的前一张和后一张优先下载。 c. 使用CSSsprite&#xff0c;SVGsprite&#xff0c;Iconfont、Base64等技术&#xff0c;如果图片为css图片的话。…

[function.require]: Failed opening required 杰奇cms

在配置杰奇cms移动端的时候&#xff0c;出现了[function.require]: Failed opening required 不要慌&#xff0c;百度一下即可解决。这个就是权限问题。由于移动端要请求pc端的文件&#xff0c;没权限。加上一个iis_iusrs读写权限即可搞定&#xff01;转载于:https://www.cnblo…

在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…

.NET Core 3.0-preview3 发布

.NET Core 3.0 Preview 3已经发布&#xff0c;框架和ASP.NET Core有许多有趣的更新。这是最重要的更新列表。 下载地址 :https://aka.ms/netcore3download 。.NET Core 3.0的更新&#xff1a;C&#xff03;中对索引和范围的更多支持支持.NET Standard 2.1。以.NET Standard项目…

如何在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…

MySql:从任何主机授予根用户登录权限

Note that this is Not very secure, and should only be used for a local development box where you don’t feel like setting up individual permissions, but still need to connect from other machines. 请注意&#xff0c;这不是很安全&#xff0c;仅应用于您不想设置…

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…

sublime python配置运行

1、安装python环境 安装完成时&#xff0c;WinR → 输入cmd → Enter → 调出来命令行&#xff0c;输入python确认安装是否成功。 2、安装sublime 3、打开sublime&#xff0c;选择工具——编译系统——新建编译系统&#xff0c;复制粘贴下面文件。保存为python3,选择工具——编…

Linux 终端环境安装 L2TP 客户端

安装&#xff1a; yum -y install xl2tpd ppp 安装成功后&#xff0c;直接进入配置流程 配置&#xff1a; 配置过程也并不复杂&#xff0c;主要有两个文件。首先就是配置 /etc/xl2tpd/xl2tpd.conf 文件。此文件原有的内容是做服务端用的&#xff0c;而作为客户端使用只需保留如…

如何在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…

windows下共享文件夹在Linux下打开

①首先在Windows下创建一个准备用来共享用的文件夹 ②在虚拟机下选择第一步创建的文件夹为共享文件夹 ③在虚拟机shell命令框下输入 cd /mnt/sgfs 回车进入共享文件夹。 备注&#xff1a;其他细节与配图后续再更新 Thanks转载于:https://www.cnblogs.com/better-day/p/105026…

设置微软应用商店的代理_如何设置和使用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

20189222 《网络攻防实践》第二周作业

20189222《网络攻防实践》第2周学习总结 教材学习内容总结 第一章&#xff1a; 要点1&#xff1a;分清黑客与骇客&#xff0c;提倡在掌握技术的同时&#xff0c;还要遵循黑客道德与法律法规。 要点2&#xff1a;网络攻防的主要内容包括系统安全攻防、网络安全攻防、物理攻击和社…