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如何透过ODBC来存取数据库
Oct 09 PHP
php中对2个数组相加的函数
Jun 24 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
PHP IE中下载附件问题解决方法
Jan 07 PHP
PHP mail()函数使用及配置方法
Jan 14 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
Feb 18 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 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编码规范-php coding standard
2007/03/16 PHP
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
jQuery 1.0.2
2006/10/11 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
详解javascript高级定时器
2015/12/31 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
PyQt5实现简易计算器
2020/05/30 Python
Django框架自定义session处理操作示例
2019/05/27 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
详解Anaconda 的安装教程
2020/09/23 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
经典优秀个人求职自荐信格式
2013/09/25 职场文书
护林员个人总结
2015/03/04 职场文书