自动上传指定文件夹下的所有文件到阿里云oss储存

来源:互联网 发布:身份证 代数 差别 知乎 编辑:程序博客网 时间:2024/05/17 22:32

一、环境

1、阿里云服务器

2、php5.0+mysql+tinkphp3.2

3、oss储存的SDK

二、逻辑

第一步:去阿里云后台获取accessKeyId和accessKeySecret

第二步:到阿里云oss对象储存去创建存储空间bucket;获取OSS地址和bucket的空间名字

第三步:遍历指定文件夹及子文件夹下的所有文件

第四步:下载oss的sdk,实现上传到OSS的bucket

第五步;指定定时任务,每隔2秒执行一次(用来实现自动上传到OSS,如果是手动可以省略此步);

三、目录结构

将下载的SDK放在Vendor目录下。

四、代码

<?php// 首页namespace Home\Controller;use Think\Controller;use OSS\Core\OssException;//不然OssException 报错class IndexController extends Controller {    public function ossscript() {        do{            //$timing = M('one_timing')->where(array('id'=>1))->find();//通过后台控制数据库的数据 来控制此循环            $timing['timing'] = 1;            ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.            set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去            $interval=2;// 每隔2秒运行            //todo            //echo time()."<br>";            $path = '../img';//文件位置   ‘../’项目之外同级目录   ‘./’项目之内同级目录            $this->traverse($path);            sleep($interval);        }        while($timing['timing'] == 1);//当为true时  无限循环    }    public function traverse($path = '') {                       //遍历文件夹下面的文件            $current_dir = opendir($path);    //opendir()返回一个目录句柄,失败返回false            while(($file = readdir($current_dir)) !== false) {    //readdir()返回打开目录句柄中的一个条目                $sub_dir = $path . DIRECTORY_SEPARATOR . $file;    //构建子目录路径                if($file == '.' || $file == '..') {                    continue;                } else if(is_dir($sub_dir)) {    //如果是目录,进行递归                    //echo 'mulu ' . $file . ':<br>';                    $this->traverse($sub_dir);                } else {    //如果是文件,直接输出                    $url = $path.'/'.$file;                    //echo $url. '<br>';                    //echo substr($url, 2);die;                    $this->uploadoss($url);                }            }    }    public function uploadoss($file_url){        /*         * $file_url 本地文件路劲         * $file_name 文件名字         * */        //上传到阿里云        //echo $file_url;        //echo $file_name;die;        vendor('Aliyun.autoload');        $accessKeyId = "LTAI3HLP6LOGPx1E";//去阿里云后台获取秘钥        $accessKeySecret = "NE0dRfO3SKsiQ1prGfIg259Nc9vP7W";//去阿里云后台获取秘钥        $endpoint = "oss-cn-shanghai.aliyuncs.com";//你的阿里云OSS地址        $ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);        $bucket= "public678";//oss中的文件上传空间        $file = $file_url;//文件路径,必须是本地的。        //$object = 'uploads/comImg/'.date('Y-m-d').'/'.$file_name;//想要保存文件的名称        $file_url = substr($file_url, 3);//去掉前面的‘../’符号        $object =str_replace("\\","/",$file_url);        try{            $mm = $ossClient->uploadFile($bucket,$object,$file);            //print_r($mm);die;            //echo $mm;die;            //上传成功,自己编码            unlink($file);//这里可以删除上传到本地的文件。        } catch(OssException $e) {            //上传失败,自己编码            printf($e->getMessage() . "\n");            return;        }    }}
五、如果对你有用,请点赞;欢迎评论

原创粉丝点击