教大家简单的使用TP5整合阿里云OSS上传文件!
我本地开发环境为:WAMP;
> php版本:7.2.1
> TP版本:5.1.13
首先使用composer 安装阿里云OSS扩展:
~~~
composer require aliyuncs/oss-sdk-php
~~~
安装完成之后创建一个简单的表单页面!
本次的页面是利用表单跳转!不是利用ajax异步上传,不过都是一样的!
页面代码为
~~~
public function up()
{
return view();
}
~~~
up模板文件为:
~~~
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="{{:url('uploadFile')}}" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="提交">
</form>
</body>
</html>
~~~
uploadFile文件为:
~~~
/**
*简单的写一下注释,看到有很多人在上传的 时候现是移动到本地文件,然后上传到阿里云,然后再删除,个人觉得这样的做法好蠢!
*大家都知道磁盘IO吧(I是input 输入) O(output 输出)
*大量的删除文件写入文件对服务器也是有影响的,对于这样操作的人真是不知道出于什么目的....还不如不用阿里云OSS呢
*/
public function uploadFile()
{
$file = request()->file('file'); //获取到上传的文件
$resResult = Image::open($file);
// 尝试执行
try {
$config = Config::pull('aliyunOss'); //获取Oss的配置
//实例化对象 将配置传入
$ossClient = new OssClient($config['KeyId'], $config['KeySecret'], $config['Endpoint']);
//这里是有sha1加密 生成文件名 之后连接上后缀
$fileName = sha1(date('YmdHis', time()) . uniqid()) . '.' . $resResult->type();
//执行阿里云上传
$result = $ossClient->uploadFile($config['Bucket'], $fileName, $file->getInfo()['tmp_name']);
/**
* 这个只是为了展示
* 可以删除或者保留下做后面的操作
*/
$arr = [
'图片地址:' => $result['info']['url'],
'数据库保存名称' => $fileName
];
} catch (OssException $e) {
return $e->getMessage();
}
//将结果输出
dump($arr);
}
~~~
ok上传成功 最后将图片展示给大家,省着点点击哦,要钱的,大哥们!
http://haotianlee.oss-cn-hongkong.aliyuncs.com/6484eb37c9cb5e5c0535b6c9a0d06663606397c9.jpeg
最后给大家给一个全部的代码,以免大家出问题:
~~~
<?php
/**
* User: 李昊天
* Date: 2018/5/17
* Time: 2:16
* Email: haotian0607@gmail.com
*/
namespace app\index\controller;
use OSS\Core\OssException;
use OSS\OssClient;
use think\Controller;
use think\facade\Config;
use think\Image;
class Index extends Controller
{
public function up()
{
return $this->fetch();
}
/**
*简单的写一下注释
* 看到有很多人在上传的 时候现实移动到本地文件,然后上传到阿里云,个人觉得这样的做法好蠢!
*大家都知道磁盘IO吧(I是input 输入) O(output 输出)
*大量的删除文件写入文件对服务器也是有影响的,对于这样操作的人真是不知道出于什么目的....
* 还不如不用阿里云OSS呢
*/
public function uploadFile()
{
$file = request()->file('file'); //获取到上传的文件
$resResult = Image::open($file);
// 尝试执行
try {
$config = Config::pull('aliyun_oss'); //获取Oss的配置
//实例化对象 将配置传入
$ossClient = new OssClient($config['KeyId'], $config['KeySecret'], $config['Endpoint']);
//这里是有sha1加密 生成文件名 之后连接上后缀
$fileName = sha1(date('YmdHis', time()) . uniqid()) . '.' . $resResult->type();
//执行阿里云上传
$result = $ossClient->uploadFile($config['Bucket'], $fileName, $file->getInfo()['tmp_name']);
/**
* 这个只是为了展示
* 可以删除或者保留下做后面的操作
*/
$arr = [
'图片地址:' => $result['info']['url'],
'数据库保存名称' => $fileName
];
} catch (OssException $e) {
return $e->getMessage();
}
//将结果输出
dump($arr);
}
}
~~~
下次有时间使用ajax上传+数据库存入+使用场景+阿里云图片操作等完整场景,需要的朋友可以+收藏哦,代码有不合理之处望大家提处理!