yii2.0整合阿里云oss删除单个文件的方法


Posted in PHP onSeptember 19, 2017

主要思路,在controller里边通过获得要删除的文件fileid,把fileid传递给model的deletefile方法进行处理,并返回处理结果。
在deletefile方法里边,先根据id找到对应的文件信息,然后删除数据里边的记录和阿里云oss里边的文件和本地的文件。

主要步骤如下:

1 首先是构建一个view视图,或者写一个ajax发送请求,此处代码略(让前端去写吧)。

2 在控制器里边接收参数,并转交给model。控制器UploadController.php里边的代码参考如下:

/**
   * 根据fileid删除文件
   * @return mixed 删除是否成功
   */
  public function actionDeletefile()
  {
    $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 = 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方法里边进行删除。

/**
   * 删除阿里云oss里存储的文件和数据库里边保存到文件上传信息
   * @param $fileid  文件表里边的主键id
   * @return boolean  删除是否成功
   */
  public function deletefile($fileid)
  {
    $res['error'] = 1;  // 1表示默认有错误。
    $fileinfo = Yii::$app->db->createCommand('select ossfile,filePath,userid from file where id=: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文件的上传和删除已经写完了。当初自己也是遇到了很多问题,发现从网上找,竟然找不到理想的参考代码。所以才写了这几篇文章。希望对大家的开发有所帮助。毕竟水平有限,如果遇到考虑不周或者代码有误的地方,请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
如何使用动态共享对象的模式来安装PHP
Oct 09 PHP
PHP学习之PHP表达式
Oct 09 PHP
PHP网上调查系统
Oct 09 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
Aug 21 PHP
ThinkPHP模板中数组循环实例
Oct 30 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
Nov 25 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
May 02 PHP
PHP多维数组指定多字段排序的示例代码
May 16 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 #PHP
yii2.0整合阿里云oss的示例代码
Sep 19 #PHP
PHP文件系统管理(实例讲解)
Sep 19 #PHP
Laravel学习教程之View模块详解
Sep 18 #PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 #PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 #PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 #PHP
You might like
隐性调用php程序的方法
2009/03/09 PHP
php中的动态调用实例分析
2015/01/07 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
Jquery 设置标题的自动翻转
2009/10/03 Javascript
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
2011/07/31 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
微信小程序实现预览图片功能
2020/10/22 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
纪检监察建议书
2014/05/19 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python