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 相关文章推荐
BBS(php & mysql)完整版(四)
Oct 09 PHP
PHP中用hash实现的数组
Jul 17 PHP
微信access_token的获取开发示例
Apr 16 PHP
php自动给网址加上链接的方法
Jun 02 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
5款适合PHP使用的HTML编辑器推荐
Jul 03 PHP
PHP图片添加水印功能示例小结
Oct 03 PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 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中调用其他系统http接口的方法说明
2014/02/28 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
JS实现li标签的删除
2019/04/12 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
如何更优雅地写python代码
2019/07/02 Python
django之自定义软删除Model的方法
2019/08/14 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
大学生社会服务心得体会
2016/01/22 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL