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中ADODB类详解
Mar 25 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
CodeIgniter输出中文乱码的两种解决办法
Jun 12 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
PHP中ajax无刷新上传图片与图片下载功能
Feb 21 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
详解php反序列化
Jun 10 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
php 使用post,get的一种简洁方式
2010/04/25 PHP
php获取字段名示例分享
2014/03/03 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
javascript的事件描述
2006/09/08 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
python实现的简单猜数字游戏
2015/04/04 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
护士自我鉴定怎么写
2014/02/07 职场文书
文明之星事迹材料
2014/05/09 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
工程部主管岗位职责
2015/02/12 职场文书
2015年党总支工作总结
2015/05/25 职场文书
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS