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 相关文章推荐
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
Oct 09 PHP
php str_replace的替换漏洞
Mar 15 PHP
PHP获取表单textarea数据中的换行问题
Sep 10 PHP
PHP curl_setopt()函数实例代码与参数分析
Jun 02 PHP
php 发送带附件邮件示例
Jan 23 PHP
PHP程序员必须清楚的问题汇总
Dec 18 PHP
php使用PDO操作MySQL数据库实例
Dec 30 PHP
PHP面向对象程序设计类的定义与用法简单示例
Dec 27 PHP
PHP isset()与empty()的使用区别详解
Feb 10 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
Dec 01 PHP
PHP操作Redis常用命令的实例详解
Dec 23 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中将一个对象保存到Session中的方法
2015/03/13 PHP
php 可变函数使用小结
2018/06/12 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
jquery 锁定弹出层实现代码
2010/02/23 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
python的urllib模块显示下载进度示例
2014/01/17 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
护士实习自我鉴定
2013/10/22 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
公司离职证明范本
2014/10/17 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL