PHP 倒腾OSS 上传与删除, 来自TP3
原框架为客服正在改动的 tp3.2第一步下载OSS文件[太久远了忘掉了]
第二部 控制器中引入
// 引入 OSS
use OSS\Core\OssException;
use OSS\OssClient;
3.上传函数【直接从客户老版本复制的 我自己写的 】
// 真实上传
public function upload(){
if(!session('uid')){redirect(U('Public/login'));}
$upload = new \Think\Upload();
$upload->maxSize = C('UPLOAD_MAXSIZE') ;
$upload->saveName = array('uniqid', array('', true));
$upload->exts = C('UPLOAD_EXTS');
$upload->savePath= C('UPLOAD_SAVEPATH');
vendor('OSS.autoload');
$ossConfig = C('OSS');
$accessKeyId = $ossConfig['ACCESS_KEY_ID'];//阿里云OSSID
$accessKeySecret = $ossConfig['ACCESS_KEY_SECRET'];//阿里云OSS 秘钥
$endpoint = $ossConfig['ENDPOINT'];//阿里云OSS 地址
$ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);
$bucket = $ossConfig['BUCKET']; //oss中的文件上传空间
$myshow = $ossConfig['MYSHOW']; //自己的域名
$mypath = $ossConfig['MYPATH']; // bucket 中 的存放路径
$info =$upload->upload();
$gourl = 'index.php/home/public/attfile/attid/'.I('attid').'/';
if(!$info) {
echo "<script language='javascript' type='text/javascript'>";
echo "alert('上传失败!$upload->getError()');";
echo "window.location.href='$gourl'";
echo "</script>";
}else{
foreach($info as $k => $v)
{
// 设置日期目录
$dir = date('Y-m-d').'/';
$object = $mypath. $dir .$v['savename'];//想要保存文件的名称
//这个数组是存上传成功以后返回的访问路径,多文件时使用implode函数将其组合
$downlink[] = $bucket.'.'.$endpoint.'/'.$object;
$file = 'uploads/'.str_replace('./','', $v["savepath"]). $v['savename'];//本地文件路径
try {
$ossClient->uploadFile($bucket, $object, $file);
//上传OSS成功
$ss=I('attid');
$data['attid']=$ss;
//$data['folder']='Uploads/'.str_replace('./','', $v["savepath"]);
$data['folder']= $myshow.$mypath.$dir ; // 文件在OSS中的路径域名 + 目录 + 日期
$data['filename']= $v["savename"];
$data['filetype']=$v["ext"];
$data['filedesc']=$v["name"];
$data['company']=$_SESSION['company'];
$data['uid']=session('uid');
$data['addtime']=date("Y-m-d H:i:s",time());
if(!empty($ss)){
M('files')->data($data)->add();
}
//这里可以删除上传到本地的文件。[文件虽然删除 但是日期目录仍然保存]
unlink($file);
} catch (OssException $e) {
// 报错提示 联系 管理员
printf("Please contact the administrator");
//上传失败
printf($e->getMessage() . "\n");
return;
}
}
}
$filename=$info["filename"]["name"];
echo "<script language='javascript' type='text/javascript'>";
echo "alert('文件$filename 上传成功');";
echo "window.location.href='$gourl'";
echo "</script>";
}
4. 删除
// 进行删除操作
public function del()
{
$data=I('post.');
vendor('OSS.autoload');
$ossConfig = C('OSS');
$accessKeyId = $ossConfig['ACCESS_KEY_ID'];//阿里云OSSID
$accessKeySecret = $ossConfig['ACCESS_KEY_SECRET'];//阿里云OSS 秘钥
$endpoint = $ossConfig['ENDPOINT'];//阿里云OSS 地址
$ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);
$bucket = $ossConfig['BUCKET']; //oss中的文件上传空间
$myshow = $ossConfig['MYSHOW']; //自己的域名
$mypath = $ossConfig['MYPATH']; // bucket 中 的存放路径
// 删掉数据库中的指定数据
M('files')->where(array('id'=>$data['id']))->delete();
// 删掉oss上的文件
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$filename = substr($data['filename'],strripos($data['filename'],"dezheng"));// 筛选字符串 注意前面不能 加上 /杠
$ossClient->deleteObject($bucket, $filename);
return 1;
} catch(OssException $e) {
var_dump(333);
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return2;
}
}
看实际情况用。
页:
[1]