这是阿里云ACE官方的Storage sdk非常的简单,我照着File 和Sae写了一个,但是一但改变了STORAGE_TYPE就无法正常运行了,找了大半天,实现找不出来问题了。在些求救
<?php
/**
* Created by PhpStorm.
* User: MrChen
* Date: 15-1-19
* Time: 下午12:59
*/
namespace Think\Storage\Driver;
use Think\Storage;
//阿里云OSS文件操作扩展
class Oss extends storage{
private $option;
private $contents = array();
private function storage(){
$storage = \Alibaba::Storage($this->option);
return $storage;
}
public function __construct($option = array()){
if(empty($option)){
if(C('oss_id') && C('oss_key') && C('oss_bucket')){
$this->option = array('id'=>C('oss_id'),'key'=>C('oss_key'),'bucket'=>C('oss_bucket'));
}else{
$this->option = '';
}
}else{
$this->option = $option;
}
}
/**
* 读取文件内容,如果传入$path,则将文件保存到$path目录,否则返回文件内容;
* @param $filename
* @param string $path
* @return bool
*/
public function read($filename,$path=''){
$this->ltrim($filename);
$storage = $this->storage();
if($storage->fileExists($filename)){
if($path){
$res = $storage->get($filename,$path);
}else{
$res = $storage->get($filename);
}
$this->contents[$filename] = $storage->get($filename);
return $res;
}else{
return false;
}
}
/**
* 写入文件
* @param $filename
* @param $content
* @param string $exp
* @return mixed
*/
public function put($filename,$content,$exp=''){
$this->ltrim($filename);
$storage = $this->storage();
$this->contents[$filename]=$content;
return $storage->saveText($filename,$content,$exp);
}
/**
* 文件追加写入
* @access public
* @param string $filename 文件名
* @param string $content 追加的文件内容
* @return boolean
*/
public function append($filename,$content,$type=''){
$this->ltrim($filename);
if($old_content = $this->read($filename,$type)){
$content = $old_content.$content;
}
return $this->put($filename,$content,$type);
}
/**
* 加载文件
* @access public
* @param string $_filename 文件名
* @param array $vars 传入变量
* @return void
*/
public function load($_filename,$vars=null){
$this->ltrim($_filename);
if(!is_null($vars))
extract($vars, EXTR_OVERWRITE);
eval('?>'.$this->read($_filename));
}
/**
* 文件是否存在
* @param $filename
* @return mixed
*/
public function has($filename){
$this->ltrim($filename);
$storage = $this->storage();
return $storage->fileExists($filename);
}
/**
* 删除文件
* @param $filename
* @return mixed
*/
public function unlink($filename){
$this->ltrim($filename);
$storage = $this->storage();
unset($this->contents[$filename]);
return $storage->delete($filename);
}
/**
* 读取文件信息
* @access public
* @param string $filename 文件名
* @param string $name 信息名 mtime或者content
* @return boolean
*/
public function get($filename,$name,$type=''){
$this->ltrim($filename);
$storage = $this->storage();
if(!isset($this->contents[$filename])){
if(!$this->has($filename)) return false;
$this->contents[$filename]=$storage->get($filename);
}
$content=$this->contents[$filename];
$meta = $storage->getMeta($filename);
$time = strtotime($meta['last-modified']);
$info = array(
'mtime' => $time,
'content' => $content
);
return $info[$name];
}
/**
* Oss特殊性 根目录不需要在前边加'./'
* @param $filename
*/
private function ltrim(&$filename){
$filename = ltrim($filename,'.');
$filename = ltrim($filename,'/');
}
} 最佳答案