yii2.0整合阿里云oss删除单个文件的方法
主要思路,在controller里边通过获得要删除的文件fileid,把fileid传递给model的deletefile方法进行处理,并返回处理结果。
在deletefile方法里边,先根据id找到对应的文件信息,然后删除数据里边的记录和阿里云oss里边的文件和本地的文件。
主要步骤如下:
1首先是构建一个view视图,或者写一个ajax发送请求,此处代码略(让前端去写吧)。
2在控制器里边接收参数,并转交给model。控制器UploadController.php里边的代码参考如下:
/**
*根据fileid删除文件
*@returnmixed删除是否成功
*/
publicfunctionactionDeletefile()
{
$res['error']=1;//准备返回数据
Yii::$app->response->format=Response::FORMAT_JSON;//设置返回格式
if(Yii::$app->request->isPost){//如果是post请求
$postdata=Yii::$app->request->post('fileid',0);//从post里边获取文件id
if($postdata==0){//如果文件id为0
$res['errmsg']='删除失败,请重试';//准备返回数据
return$res;//返回结果
}
$model=newUploadForm();//实例化model
$delres=$model->deletefile($postdata);//根据id调用deletefile方法
if($delres['error']==0){//如果删除成功
$res['error']=0;//准备返回信息
}else{
$res['errmsg']=$delres['errmsg'];//如果删除失败,准备返回信息
}
}else{
$res['errmsg']='非法请求';//主要考虑post请求,get请求请自行修改代码
}
return$res;//返回删除结果
}
3当controller把文件id转移给UploadForm.php以后,在deletefile方法里边进行删除。
/**
*删除阿里云oss里存储的文件和数据库里边保存到文件上传信息
*@param$fileid文件表里边的主键id
*@returnboolean删除是否成功
*/
publicfunctiondeletefile($fileid)
{
$res['error']=1;//1表示默认有错误。
$fileinfo=Yii::$app->db->createCommand('selectossfile,filePath,useridfromfilewhereid=:id')->bindParam(':id',$fileid)->queryOne();
//根据主键从数据库里边查询文件的信息,至少要一个服务器文件的完整路径(用来删除服务器文件)和一个ossfile的名称(删除阿里云oss里边的文件)
if(count($fileinfo)>0){//如果找到了文件的记录
//这里边的验证可以更丰富一些,比如验证用户是否有权限删除该文件,文件是否属于该用户等等
$ossfile=$fileinfo['ossfile'];//获取ossfile
$realfile=$fileinfo['filePath'];//获取服务器上的文件
$owner=$fileinfo['userid'];//获取上传图片用户的id
$operator=Yii::$app->user->id;//获取删除图片的用户
if($owner!=$operator){//如果删除图片的用户不是上传的用户,报错并返回
$res['errmsg']='您删除的图片不存在';
return$res;
}
$trans=Yii::$app->db->beginTransaction();//开启事务
try{
$delstatus=Yii::$app->db->createCommand()->delete('file','id='.$fileid)->execute();
//删除数据库里边的记录
if($delstatus){//如果删除成功
if(Yii::$app->Aliyunoss->delete($ossfile)){//删除阿里云oss上的文件
@unlink($realfile);//删除服务器上的文件
$res['error']=0;//准备返回信息
$trans->commit();//提交事务
}
}
$trans->rollBack();//删除失败,事务回滚
}catch(Exception$e){//发生异常
$res['errmsg']='删除失败';//准备返回信息
$trans->rollBack();//事务回滚
}
}else{
$res['errmsg']='图片不存在,请重试';//图片不存在
}
return$res;//返回删除结果
}
阿里云oss文件的上传和删除已经写完了。当初自己也是遇到了很多问题,发现从网上找,竟然找不到理想的参考代码。所以才写了这几篇文章。希望对大家的开发有所帮助。毕竟水平有限,如果遇到考虑不周或者代码有误的地方,请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!