大佬教程收集整理的这篇文章主要介绍了yii2.0整合阿里云oss删除单个文件的方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
主要思路,在controller里边通过获得要删除的文件filEID,把filEID传递给model的deletefile方法进行处理,并返回处理结果。 在deletefile方法里边,先根据id找到对应的文件信息,然后删除数据里边的记录和阿里云oss里边的文件和本地的文件。
主要步骤如下:
1 首先是构建一个view视图,或者写一个ajax发送请求,此处代码略(让前端去写吧)。
2 在控制器里边接收参数,并转交给model。控制器UploadController.php里边的代码参考如下:
if ($postdata==0){ // 如果文件id为0
$res['errmsg'] = '删除失败,请重试'; // 准备返回数据
return $res; // 返回结果
}
$model = new UploadForm(); // 实例化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方法里边进行删除。
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文件的上传和删除已经写完了。当初自己也是遇到了很多问题,发现从网上找,竟然找不到理想的参考代码。所以才写了这几篇文章。希望对大家的开发有所帮助。毕竟水平有限,如果遇到考虑不周或者代码有误的地方,请给我留言,小编会及时回复大家的。在此也非常感谢大家对菜鸟教程网站的支持!
以上是大佬教程为你收集整理的yii2.0整合阿里云oss删除单个文件的方法全部内容,希望文章能够帮你解决yii2.0整合阿里云oss删除单个文件的方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。