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 相关文章推荐
一个MYSQL操作类
Nov 16 PHP
附件名前加网站名
Mar 23 PHP
在PHP中操作Excel实例代码
Apr 29 PHP
PHP编码转换
Nov 05 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 PHP
php基于GD库画五星红旗的方法
Feb 24 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
php微信公众号开发模式详解
Nov 28 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
PHP聊天室简单实现方法详解
Dec 08 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与paypal整合方法
2010/11/28 PHP
yii实现级联下拉菜单的方法
2014/07/31 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
Shell如何接收变量输入
2012/09/24 面试题
心理健康心得体会
2014/01/02 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
服务员自我评价
2014/01/25 职场文书
财务学生的职业生涯发展
2014/02/11 职场文书
三项教育活动实施方案
2014/03/30 职场文书
企业授权委托书范本
2014/04/02 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL