(一)首先在阿里的控制台中OSS里面新建一个bucket
 
ThinkPHP中整合阿里OSS
ThinkPHP中整合阿里OSS
 读写权限改为公共读。
以及endpoint需要记录在下面的配置项中。
然后去申请keyid 和secret
准备工作做完了就可以开始下载SDK了
阿里OSS的SDK下载地址
ThinkPHP中整合阿里OSS
把下载好的文件复制到tp框架的ThinkPHP/Library/Vendor/Alioss文件夹 (Alioss自定义命名)
(二)、在配置项中添加oss配置
/Application/Common/Conf/config.php
 
1
    'ALIOSS_CONFIG' => array(
2
        'KEY_ID' => '',
3
        'KEY_SECRET' => '',
4
        'END_POINT' => '',
5
        'BUCKET' => ''
6
        ),

(三)、在自定义函数中实例化并上传图片
/Application/Common/Common/function.php 
1
/**
2
 * 实例化阿里云oos
3
 * @return object 实例化得到的对象
4
 */
5
function new_oss(){
6
    vendor('Alioss.autoload');
7
    $config=C('ALIOSS_CONFIG');
8
    $oss=new \OSS\OssClient($config['KEY_ID'],$config['KEY_SECRET'],$config['END_POINT']);
9
    return $oss;
10
}
11
12
/**
13
 * 上传文件到oss并删除本地文件
14
 * @param  string $path 文件路径
15
 * @return bollear      是否上传
16
 */
17
function oss_upload($path){
18
    // 获取bucket名称
19
    $bucket=C('ALIOSS_CONFIG.BUCKET');
20
    // 先统一去除左侧的.或者/ 再添加./
21
    $oss_path=ltrim($path,'./');
22
    $path='./'.$oss_path;
23
24
    if (file_exists($path)) {
25
        // 实例化oss类
26
        $oss=new_oss();
27
        // 上传到oss    
28
        $oss->uploadFile($bucket,$oss_path,$path);
29
        // 如需上传到oss后 自动删除本地的文件 则删除下面的注释 
30
        unlink($path);
31
        return true;
32
33
    }else{
34
        return false;
35
    }
36
    
37
}
38
/**
39
 * 删除oss上指定文件
40
 * @param  string $object 文件路径 例如删除 /Public/README.md文件  传Public/README.md 即可
41
 */
42
function oss_delet_object($object){
43
    // 实例化oss类
44
    $oss=new_oss();
45
    // 获取bucket名称
46
    $bucket=C('ALIOSS_CONFIG.BUCKET');
47
    $test=$oss->deleteObject($bucket,$object);
48
}
49
50
/**
51
 * 获取完整网络连接
52
 * @param  string $path 文件路径
53
 * @return string       http连接
54
 */
55
function get_url($path){
56
    // 如果是空;返回空
57
    if (empty($path)) {
58
        return '';
59
    }
60
    // 如果已经有http直接返回
61
    if (strpos($path, 'http://')!==false) {
62
        return $path;
63
    }
64
    // 判断是否使用了oss
65
    $alioss=C('ALIOSS_CONFIG');
66
    if (empty($alioss['KEY_ID'])) {
67
        return 'http://'.$_SERVER['HTTP_HOST'].$path;
68
    }else{
69
        return 'http://'.$alioss['BUCKET'].'.'.$alioss['END_POINT'].$path;
70
    }
71
    
72
}
(四)项目中调用方法
1
    public function upFile(){
2
        $uplode= new \Think\Upload();//造实例化对象:造一个上传文件的类     
3
        $uplode->maxSize="31457280";//上传文件的大小
4
        $uplode->exts=array('jpg','gif','png','jpeg');//设置图片格式
5
        $uplode->autoSub=true;//自动使用子目录保存上传文件 默认为true    
6
        $uplode->subName=array('date','Ymd');//文件命名方式已时期时间戳命名
7
        $uplode->rootPath="./public/";//表示在public文件夹下
8
        $uplode->savePath="./Uploads/";//设置附件上传目录:表示在public文件夹下自动建一个Uploads文件夹
9
          // 上传文件
10
       $info   =   $uplode->upload();  
11
         if(!$info){
12
        // 上传错误提示错误信息     
13
        $this->error($uplode->getError());   
14
         }else{
15
             // 上传成功 获取上传文件信息
16
            foreach($info as $file){
17
            $path =  $file['savepath'].$file['savename'];
18
            $filename = $file['savename'];
19
                }        
20
        }
21
        $path = '/public'.$path; //必须要加上完整的路径,否则在调用上传OSS方法的时候会判断该文件不存在。且'./Public/'最前面的点需要去掉,为了后面获取路径;
22
        $res = oss_upload($path);
23
        if($res) {
24
            $file = get_url($path);
25
        }
26
        echo $file; //上传到OSS的图片访问地址
27
    }

相关文章: