您的位置:首页 > 编程语言 > PHP开发

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

2017-06-30 11:02 323 查看
一、环境

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;
}
}

}

五、如果对你有用,请点赞;欢迎评论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐