教大家簡單的使用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上傳+數據庫存入+使用場景+阿里云圖片操作等完整場景,需要的朋友可以+收藏哦,代碼有不合理之處望大家提處理!