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.ini 中文版
Oct 28 PHP
使用PHP的日期与时间函数技巧
Apr 24 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
php中动态调用函数的方法
Mar 16 PHP
php带抄送和密件抄送的邮件发送方法
Mar 20 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
Smarty模板简单配置与使用方法示例
May 23 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
ThinkPHP打水印及设置水印位置的方法
Oct 14 PHP
Yii 2.0如何使用页面缓存方法示例
May 23 PHP
PHP的mysqli_select_db()函数讲解
Jan 23 PHP
php的优点总结 php有哪些优点
Jul 19 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
php实现微信企业转账功能
2018/10/02 PHP
window.ActiveXObject使用说明
2010/11/08 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
深入理解React高阶组件
2017/09/28 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
详解vue组件基础
2018/05/04 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
python多重继承新算法C3介绍
2014/09/28 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
Python元组知识点总结
2019/02/18 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
教师找工作推荐信
2013/11/23 职场文书
高三学生评语大全
2014/04/25 职场文书
建设工地安全标语
2014/06/07 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS