热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

阿里云OSS文件上传封装

1.先用composer安装阿里云OSS的PHPSDK2.配置文件里定义阿里云OSS的秘钥3.在index控制器里的代码封装

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 = 0;
protected $video_size = 0;
protected $other_size = 0;
/**
* 构造函数
*/
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\' => 1, \'message\' => \'存储空间名不能为空!\']);
}
try {
$ossClient
= new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
$ossClient
->createBucket($bucket);
return json([\'data\' => \'\', \'code\' => 0, \'message\' => $bucket . \'存储空间创建成功\']);
}
catch (OssException $e) {
return json([\'data\' => $e->getMessage(), \'code\' => 1, \'message\' => \'创建失败\']);
}
}
/**
* 上传文件
*/
public function uploadFile()
{
/*判断提交方式*/
if (!request()->isPost()) {
throw new \think\Exception(\'请求方式错误!\');
}
/*获取到上传的文件*/
$file
= $_FILES[\'file\'];
if (!$file) {
return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'文件不存在!\']);
}
// 判断文件大小
if ($file[\'size\'] > $this->other_size) {
return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'文件大小不能超过\' . ($this->other_size / 1024 / 1024) . \'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\' => 1, \'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\' => 1, \'message\' => \'上传失败!\']);
}
//将结果返回
return json([\'data\' => array(\'file\' => $arr[\'oss_url\']), \'code\' => 0, \'message\' => \'成功上传到oss\']);
}
/**
* 上传视频
*/
public function uploadVideo()
{
/*判断提交方式*/
if (!request()->isPost()) {
throw new \think\Exception(\'请求方式错误!\');
}
/*获取到上传的文件*/
$file
= $_FILES[\'file\'];
if (!$file) {
return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'文件不存在!\']);
}
// 判断文件大小
if ($file[\'size\'] > $this->video_size) {
return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'视频大小不能超过\' . ($this->video_size / 1024 / 1024) . \'M\']);
}
$name
= $file[\'name\'];
$format
= strrchr($name, \'.\');//截取文件后缀名如 (.jpg)
/*判断图片格式*/
$allow_type
= [\'.mp4\', \'.avi\', \'.rmvb\'];
if (!in_array($format, $allow_type)) {
return json([\'data\' => \'\', \'code\' => 1, \'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\' => 1, \'message\' => \'上传失败!\']);
}
//将结果返回
return json([\'data\' => array(\'file\' => $arr[\'oss_url\']), \'code\' => 0, \'message\' => \'成功上传到oss\']);
}
/**
* 上传图片
*/
public function uploadImage()
{
/*判断提交方式*/
if (!request()->isPost()) {
throw new \think\Exception(\'请求方式错误!\');
}
/*获取到上传的文件*/
$file
= $_FILES[\'file\'];
if (!$file) {
return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'文件不存在!\']);
}
// 判断文件大小
if ($file[\'size\'] > $this->image_size) {
return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'视频大小不能超过\' . ($this->image_size / 1024 / 1024) . \'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\' => 1, \'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\' => 1, \'message\' => \'上传失败!\']);
}
//将结果返回
return json([\'data\' => array(\'file\' => $arr[\'oss_url\']), \'code\' => 0, \'message\' => \'成功上传到oss\']);
}
/**
* 上传图片base64
*/
public function uploadImageBase64()
{
// 判断提交方式及图片类型
if (!request()->has(\'base64\', \'post\')) {
return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'请求方式错误,或图片非base64格式类型\']);
}
$data
= $_POST[\'base64\'];
$result
= $this->new_base64_upload($data);
if ($result[\'code\'] !== 200) {
return json([\'data\' => \'\', \'code\' => 1, \'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\' => 1, \'message\' => \'上传失败\']);
}
unlink($filePath);
return json([\'data\' => array(\'file\' => $arr[\'oss_url\']), \'code\' => 0, \'message\' => \'成功上传到oss\']);
}
/**
* 将Base64数据转换成二进制并存储到指定路径
*/
protected function new_base64_upload($base64, $image_path = \'upload/posts/\')
{
$data
= explode(\',\', $base64);
trace($data,
\'api\');
unset($base64);
if (count($data) !== 2) {
return [\'code\' => 400, \'msg\' => \'文件格式错误\'];
}
if (!preg_match(\'/^(data:\s*image\/(\w+);base64)/\', $data[0], $result)) {
return [\'code\' => 400, \'msg\' => \'文件格式错误\'];
}
$type
= $result[2];
if (!in_array($type, array(\'jpeg\', \'jpg\', \'gif\', \'bmp\', \'png\'))) {
return [\'code\' => 400, \'msg\' => \'文件格式不在允许范围内\'];
}
$image_name
= md5(uniqid()) . \'.\' . $result[2];
$image_file
= $image_path . $image_name;
//服务器文件存储路径
try {
if (file_put_contents($image_file, base64_decode($data[1]))) {
return [\'code\' => 200, \'msg\' => \'成功\', \'data\' => [\'name\' => $image_name, \'path\' => $image_path]];
}
else {
return [\'code\' => 400, \'msg\' => \'文件保存失败\'];
}
}
catch (\Exception $e) {
$msg
= $e->getMessage();
return [\'code\' => 400, \'msg\' => $msg];
}
}
}

 



推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • 阿里云虚拟主机安装多个织梦系统的方法
    本文介绍了在阿里云虚拟主机上安装多个织梦系统的方法。通过创建不同名称的文件夹并将不同的域名解析到对应的目录,可以实现多个系统的安装。在安装过程中需要注意修改数据库前缀,并在系统设置中还原数据库。同时还介绍了阿里云虚拟主机二级域名绑定二级目录和域名重定向的用法。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • 如何通过swoole加速laravel的问题?
    这篇文章主要介绍了关于如何使用swoole加速laravel,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下再来复习一下吧,导致php慢的各种因素中解析性语言的 ... [详细]
  • php composer 安装,phpstudy  composer 使用安装
    本人是windows系统phpstudy是最新2018版本以安装laravel框架为例子一如图一,点击phpComposer出现系统指令框,根据指令框路 ... [详细]
  • windows下composer命令无效的解决办法
    开发工具|composerwindows,composer开发工具-composer下面由composer教学栏目给大家介绍windows下composer安装不了或compose ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了未找到类'MaddHatterLaravelFullcalendarServiceProvider'相关的知识,希望对你 ... [详细]
  • 支持composer的php,composer配置
    本文目录一览:1、PHP与composer结合-使用命名空间实现文件自动加载 ... [详细]
author-avatar
那时_心不在_476
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有