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 相关文章推荐
一个简单的自动发送邮件系统(二)
Oct 09 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
Nov 02 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
php抽象类使用要点与注意事项分析
Feb 09 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
Nov 19 PHP
Zend Framework教程之视图组件Zend_View用法详解
Mar 05 PHP
PHP微信发送推送消息乱码的解决方法
Feb 28 PHP
PHP中rename()函数的妙用讲解
Feb 28 PHP
不常用但很实用的PHP预定义变量分析
Jun 25 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 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取得字符串首字母的方法
2015/03/25 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
一个js控制的导航菜单实例代码
2013/12/03 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
boostrapTable的refresh和refreshOptions区别浅析
2017/01/22 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
COS美国官网:知名服装品牌
2019/04/08 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
Unineed中文官网:高端护肤美妆与时尚配饰,英国直邮
2020/07/23 全球购物
连锁经营管理专业大学生求职信
2013/10/30 职场文书
大学毕业生个人自荐信范文
2014/01/08 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
地震捐款倡议书
2014/08/29 职场文书
委托证明范本
2014/11/25 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
索赔员岗位职责
2015/02/15 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
红白喜事主持词
2015/07/06 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python
Python list列表删除元素的4种方法
2021/11/01 Python
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技