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动态变静态原理
Nov 25 PHP
深入理解PHP之require/include顺序 推荐
Jan 02 PHP
php中使用addslashes函数报错问题的解决方法
Feb 06 PHP
请离开include_once和require_once
Jul 18 PHP
PHP页面中文乱码分析
Oct 29 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
Symfony模板的快捷变量用法实例
Mar 17 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
php简单读取.vcf格式文件的方法示例
Sep 02 PHP
PHP获取远程http或ftp文件的md5值的方法
Apr 15 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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 ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
浅析JS刷新框架中的其他页面 && JS刷新窗口方法汇总
2013/07/08 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
利用Python如何将数据写到CSV文件中
2018/06/05 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
python中update的基本使用方法详解
2019/07/17 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
Python assert关键字原理及实例解析
2019/12/13 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
html5录音功能实战示例
2019/03/25 HTML / CSS
美国在线珠宝商店:SZUL
2017/02/11 全球购物
党员目标管理责任书
2014/07/25 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers
Tomcat弱口令复现及利用
2022/05/06 Servers
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS