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 相关文章推荐
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
PHP 数组和字符串互相转换实现方法
Mar 26 PHP
php实现天干地支计算器示例
Mar 14 PHP
apache php mysql开发环境安装教程
Jul 28 PHP
phpcms中的评论样式修改方法
Oct 21 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
PHP计算近1年的所有月份
Mar 13 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
PHP实现通过CURL上传文件功能示例
May 30 PHP
PHP中str_split()函数的用法讲解
Apr 11 PHP
Laravel 创建指定表 migrate的例子
Oct 09 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中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
php session的锁和并发
2016/01/22 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
python机器学习库常用汇总
2017/11/15 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
单位接收证明格式
2015/06/18 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫