# 阿里云OSS
本服務用于管理阿里云OSS
本服務是對阿里云SDK的封裝,所以方法名與阿里的SDK一樣,下面是列舉出的幾個使用方法,其他OSS方法都是可以使用的,請參考阿里云 [OSS參考文檔](https://help.aliyun.com/document_detail/32103.html?spm=5176.doc32099.6.748.85Qz6b)
同時支持其他框架使用如Laravel 、ThinkPHP 查看 [composer安裝組件](https://packagist.org/packages/houdunwang/oss)
[TOC]
## PHP上傳
#### 配置
| 配置 | 查看 |
| --- | --- |
| endPoint | 登錄某個塊查看 bucket概覽 |
| accessId | 登錄阿里云后臺查看右上角的 "訪問控制(使用子帳號)" 或 "accesskeys(使用主帳號)" |
| accessKey | 同上 accessId |
```
Config::set('oss',[
'accessKeyId'=>'',
'accessKeySecret'=>'',
//外網Endpoint OSS開通Region和Endpoint對照表: https://help.aliyun.com/document_detail/31837.html
'endpoint'=>'oss-cn-hangzhou.aliyuncs.com',
//OSS塊標識
'bucket'=> "houdunren"
]
);
```
#### 字符串上傳
```
$object = "hd.txt";
$content = "Hi, OSS.";
$res = Oss::putObject($object, $content);
if(isset($res['oss-request-url'])){
echo "文件:".$res['oss-request-url'];
}
```
#### 上傳本地文件
```
$object = '1-test-upload.jpg';
$filePath = 'tests/1.jpg';
$res = Oss::uploadFile($object, $filePath);
if(isset($res['oss-request-url'])){
echo "文件:".$res['oss-request-url'];
}
```
#### 其他OSS管理
組件與官網SDK無縫集成,比如我們拿刪除資源舉例。
下面是官方刪除對象代碼 [官網查看](https://help.aliyun.com/document_detail/32105.html?spm=5176.doc32103.6.761.FSG7RW)
```
$ossClient->deleteObject($bucket, $object);
```
本組件實現的刪除方法
```
Oss::deleteObject('hdphp.php');
```
也就是說我們在組件中調用SDK提供的方法時,不需要傳遞第一個塊名稱。
## 前臺直接上傳
#### 后臺簽名
```
<?php
class Oss
{
//生成供前臺使用的簽名
public static function sign()
{
//阿里云 AccessKeyId
$id = 'xxxxxx';
//阿里云 AccessKeySecret
$key = 'xxxxx';
//OSS外網域名: 在阿里云后臺OSS bucket中查看
$host = 'http://hdxj.oss-cn-hangzhou.aliyuncs.com';
//oss中本次上傳存放文件的目錄
$dir = $_GET['dir'];
function gmt_iso8601($time)
{
$dtStr = date("c", $time);
$mydatetime = new \DateTime($dtStr);
$expiration = $mydatetime->format(\DateTime::ISO8601);
$pos = strpos($expiration, '+');
$expiration = substr($expiration, 0, $pos);
return $expiration."Z";
}
$now = time();
$expire = 30; //設置該policy超時時間是10s. 即這個policy過了這個有效時間,將不能訪問
$end = $now + $expire;
$expiration = gmt_iso8601($end);
//最大文件大小.用戶可以自己設置
$condition = [0 => 'content-length-range', 1 => 0, 2 => 1048576000];
$conditions[] = $condition;
//表示用戶上傳的數據,必須是以$dir開始, 不然上傳會失敗,這一步不是必須項,只是為了安全起見,防止用戶通過policy上傳到別人的目錄
$start = [0 => 'starts-with', 1 => '$key', 2 => $dir];
$conditions[] = $start;
$arr = ['expiration' => $expiration, 'conditions' => $conditions];
//return;
$policy = json_encode($arr);
$base64_policy = base64_encode($policy);
$string_to_sign = $base64_policy;
$signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true));
$response = [];
$response['accessid'] = $id;
$response['host'] = $host;
$response['policy'] = $base64_policy;
$response['signature'] = $signature;
$response['expire'] = $end;
//這個參數是設置用戶上傳指定的前綴
$response['dir'] = $dir;
return json_encode($response);
}
}
echo Oss::sign();
```
#### 前臺
```
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>OSS上傳</title>
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
<script>
//模塊配置項
var hdjs = {
//框架目錄
'base': '../../',
};
</script>
<script src="../../app/util.js"></script>
<script src="../../require.js"></script>
<script src="../../config.js"></script>
</head>
<body>
<div class="input-group">
<input type="text" class="form-control" v-model="v.path">
<span class="input-group-btn">
<button class="btn btn-default" type="button" id="pickVideo">上傳文件</button>
</span>
</div>
</div>
<script>
function upload() {
require(['oss'], function (oss) {
var id = '#pickVideo';
var uploader = oss.upload({
//獲取簽名
serverUrl: 'sign.php?',
//上傳目錄
dir: 'houdunwang/',
//按鈕元素
pick: id,
accept: {
title: 'Images',
// extensions: 'mp4',
// mimeTypes: 'video/mp4'
}
});
//上傳開始
uploader.on('startUpload', function () {
console.log('開始上傳');
});
//上傳成功
uploader.on('uploadSuccess', function (file, response) {
console.log('上傳完成,文件名:' + oss.oss.host + '/' + oss.oss.object_name);
});
//上傳中
uploader.on('uploadProgress', function (file, percentage) {
console.log('上傳中,進度:' + parseInt(percentage * 100));
})
//上傳結束
uploader.on('uploadComplete', function () {
console.log('上傳結束');
})
});
}
upload();
</script>
</body>
</html>
```
- 文檔已經遷移到后盾人
- 介紹
- 框架特性
- 開發規范
- 許可協議
- 作者向軍
- 安裝框架
- 更新框架
- 基礎
- 入口文件
- 應用配置
- 優雅鏈接
- 目錄結構
- 系統常量
- 自動加載
- 應用密鑰
- 系統函數
- CSRF保護
- 依賴注入
- 跨域訪問
- 配置
- 配置文件
- 基本功能
- 擴展配置
- c 函數
- 控制器
- 定義聲明
- 基本使用
- 相關函數
- 響應消息
- 路由
- 基礎知識
- 基礎路由
- 路由參數
- 參數檢測
- 依賴注入
- 控制器
- 分組路由
- RESTful
- 別名路由
- 數據
- 配置相關
- 核心操作
- 查詢構造器
- 日志記錄
- 分頁處理
- 事務處理
- 函數相關
- 數據庫
- 數據遷移
- 數據填充
- 模型
- 定義模型
- 模型動作
- 模型驗證
- 自動完成
- 自動過濾
- 字段保護
- 數據填充
- 多表關聯
- 分頁處理
- 倉庫
- 數據倉庫
- 查詢規則
- 視圖
- 基礎知識
- 模板配置
- 模板文件
- 分配數據
- 系統標簽
- 擴展標簽
- 緩存模板
- 模板繼承
- 視圖函數
- widget
- vue組件
- 中間件
- 中間件
- 緩存
- 基本操作
- 文件緩存
- 數據表緩存
- 服務
- 服務容器
- 定制服務
- 相關函數
- 請求
- 基本使用
- 請求擴展
- 測試
- 基礎知識
- 基本使用
- HTTP測試
- 調試
- 調試模式
- 日志管理
- 組件
- 多語言
- 響應處理
- Cookie
- Session
- 驗證碼
- XML
- 自動驗證
- 文件處理
- 壓縮解壓
- RBAC
- 數組增強
- 分頁管理
- 圖像處理
- 生成靜態
- 加密解密
- 字符串
- 數據集合
- 工具服務
- 目錄操作
- 郵件發送
- CURL
- QQ登錄
- 數據備份
- 購物車
- 日志處理
- 命令組件
- 二維碼
- 后盾云
- 日期處理
- 阿里
- 支付寶
- 阿里云直播
- 阿里云短信
- 阿里云郵件
- 阿里云OSS
- SOCKET
- 啟動與關閉
- 前端
- 微信