為什么80%的碼農都做不了架構師?>>> ??
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,圖示
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;}}}}}
?