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 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
PHP实现用户认证及管理完全源码
Mar 11 PHP
PHP中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
php 团购折扣计算公式
Nov 24 PHP
php截取后台登陆密码的代码
May 05 PHP
php中解析带中文字符的url函数分享
Jan 20 PHP
php操作memcache缓存方法分享
Jun 03 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
thinkphp 验证码 的使用小结
May 07 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 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 常用字符串函数总结
2008/03/15 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
php去除重复字的实现代码
2011/09/16 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
php中动态调用函数的方法
2015/03/16 PHP
PHP类型约束用法示例
2016/09/28 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
Python随机生成彩票号码的方法
2015/03/05 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
Python提取频域特征知识点浅析
2019/03/04 Python
Python检测数据类型的方法总结
2019/05/20 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
汽车工程专业应届生求职信
2013/10/19 职场文书
房地产开盘策划方案
2014/02/10 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
向女朋友道歉的话
2015/01/20 职场文书
遗失证明范文
2015/06/19 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
python xlwt模块的使用解析
2021/04/13 Python
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android