suchen
Heimphp教程php手册阿里云OSS轻量级Driver

不用加载官方那一大坨sdk了,简单一点
看过网上的一些例子都过于复杂,包含了官方的phpsdk那一大坨东西,理论上我只需要简单的上传文件而已,不需要那么多东西,于是自己写了一下。

以下代码保存到/yourpath/ThinkPHP/Library/Think/Upload/Driver/Oss.class.php即可<?php <br /> <br> // +----------------------------------------------------------------------<br> // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]<br> // +----------------------------------------------------------------------<br> // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.<br> // +----------------------------------------------------------------------<br> // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )<br> // +----------------------------------------------------------------------<br> // | Author: 废墟 <r.anerg> <http:><br> // +----------------------------------------------------------------------<br> <br> namespace Think\Upload\Driver;<br> <br> class Oss {<br> <br>     const OSS_HOST = 'oss.aliyuncs.com';<br> <br>     /**<br>      * 上传文件根目录<br>      * @var string<br>      */<br>     private $rootPath;<br> <br>     /**<br>      * 上传错误信息<br>      * @var string<br>      */<br>     private $error  = '';<br>     private $config = array(<br>         'access_id'  => '', //阿里云Access Key ID<br>         'access_key' => '', //阿里云Access Key Secret<br>         'bucket'     => '', //空间名称<br>         'timeout'    => 90, //超时时间<br>     );<br> <br>     /**<br>      * 构造函数,用于设置上传根路径<br>      * @param array  $config FTP配置<br>      */<br>     public function __construct($config) {<br>         /* 默认FTP配置 */<br>         $this->config = array_merge($this->config, $config);<br>     }<br> <br>     /**<br>      * 检测上传根目录(阿里云上传时支持自动创建目录,直接返回)<br>      * @param string $rootpath   根目录<br>      * @return boolean true-检测通过,false-检测失败<br>      */<br>     public function checkRootPath($rootpath) {<br>         /* 设置根目录 */<br>         $this->rootPath = trim($rootpath, './') . '/';<br>         return true;<br>     }<br> <br>     /**<br>      * 检测上传目录(阿里云上传时支持自动创建目录,直接返回)<br>      * @param  string $savepath 上传目录<br>      * @return boolean          检测结果,true-通过,false-失败<br>      */<br>     public function checkSavePath($savepath) {<br>         return true;<br>     }<br> <br>     /**<br>      * 创建文件夹 (阿里云上传时支持自动创建目录,直接返回)<br>      * @param  string $savepath 目录名称<br>      * @return boolean          true-创建成功,false-创建失败<br>      */<br>     public function mkdir($savepath) {<br>         return true;<br>     }<br> <br>     /**<br>      * 保存指定文件<br>      * @param  array   $file    保存的文件信息<br>      * @param  boolean $replace 同名文件是否覆盖<br>      * @return boolean          保存状态,true-成功,false-失败<br>      */<br>     public function save($file, $replace = true) {<br>         $_headers = array('Content-Type: ' . $file['type']);<br>         $resource = fopen($file['tmp_name'], 'r');<br> <br>         $path = $this->rootPath . $file['savepath'] . $file['savename'];<br> <br>         $uri = "/{$this->config['bucket']}{$path}";<br>         $ch  = curl_init('http://' . self::OSS_HOST . $uri);<br> <br>         $date = gmdate('D, d M Y H:i:s \G\M\T');<br> <br>         array_push($_headers, "Date: {$date}");<br> <br>         $sign_string = "PUT\n\n" . $file['type'] . "\n" . $date . "\n" . $uri;<br>         $sign        = $this->hex_to_base64(hash_hmac('sha1', $sign_string, $this->config['access_key']));<br> <br>         array_push($_headers, 'Authorization: OSS ' . $this->config['access_id'] . ':' . $sign);<br> <br>         fseek($resource, 0, SEEK_END);<br>         $length = ftell($resource);<br>         fseek($resource, 0);<br> <br>         array_push($_headers, "Content-Length: {$length}");<br> <br>         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");<br>         curl_setopt($ch, CURLOPT_POST, 1);<br>         curl_setopt($ch, CURLOPT_INFILE, $resource);<br>         curl_setopt($ch, CURLOPT_INFILESIZE, $length);<br>         curl_setopt($ch, CURLOPT_HTTPHEADER, $_headers);<br>         curl_setopt($ch, CURLOPT_TIMEOUT, $this->config['timeout']);<br>         curl_setopt($ch, CURLOPT_HEADER, 1);<br>         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br>         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);<br>         $response = curl_exec($ch);<br>         $status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);<br>         fclose($resource);<br>         if ($status == 200) {<br>             return true;<br>         } else {<br>             $this->error = $response;<br>             return false;<br>         }<br>     }<br> <br>     /**<br>      * 获取最后一次上传错误信息<br>      * @return string 错误信息<br>      */<br>     public function getError() {<br>         return $this->error;<br>     }<br> <br> <br>     private function hex_to_base64($str) {<br>         $result = '';<br> <br>         for ($i = 0; $i              $result .= chr(hexdec(substr($str, $i, 2)));<br>         }<br> <br>         return base64_encode($result);<br>     }<br> <br> }</http:></r.anerg>使用方法也比较简单,如果只有一个bucket则可以把配置写入config.php里,内容如下'FILE_UPLOAD_TYPE' => 'Oss',<br> 'UPLOAD_TYPE_CONFIG' => array(<br>     'access_id' => 'access_id', //阿里云Access Key ID<br>     'access_key' => 'access_key', //阿里云Access Key Secret<br>     'bucket' => 'bucket' //阿里云的bucket<br> ),如果你需要将不同的文件存入不同的bucket则需要在上传方法中采用动态配置$config     = array(<br>     'maxSize'  => 0,<br>     'exts'     => array('jpg', 'jpeg', 'png'),<br>     'saveName' => array('uniq_photo_name', '__FILE__'),<br>     'rootPath' => '/',<br> );<br> $oss_config = array(<br>     'access_id'  => 'access_id', //阿里云Access Key ID<br>     'access_key' => 'access_key', //阿里云Access Key Secret<br>     'bucket'     => 'bucket'<br> );<br> $upload     = new \Think\Upload($config, 'Oss', $oss_config);

AD:真正免费,域名+虚机+企业邮箱=0元

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.