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+MySql编写聊天室
Oct 09 PHP
第十五节--Zend引擎的发展
Nov 16 PHP
php中文字符截取防乱码
Mar 28 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
Apr 30 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
PHP检测链接是否存在的代码实例分享
May 06 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
Nov 22 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
PHP哈希表实现算法原理解析
Dec 11 PHP
详解Go与PHP的语法对比
May 29 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备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
php数组删除元素示例
2014/03/21 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
简单讲解Python中的闭包
2015/08/11 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
简单了解Django项目应用创建过程
2020/07/06 Python
详解Django中异步任务之django-celery
2020/11/05 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
生产班组长岗位职责
2014/01/05 职场文书
高中政治教学反思
2014/01/18 职场文书
百日安全活动总结
2014/05/04 职场文书
考察现实表现材料
2014/05/19 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书