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 飞信好友免费短信API接口开源版
Jul 22 PHP
php设计模式 FlyWeight (享元模式)
Jun 26 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
php cookie使用方法学习笔记分享
Nov 07 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
PHP面向对象精要总结
Nov 07 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
php微信扫码支付 php公众号支付
Mar 24 PHP
php操作redis数据库常见方法实例总结
Feb 20 PHP
php变量与字符串的增删改查操作示例
May 07 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 PHP
goto语法在PHP中的使用教程
Sep 17 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
How do I change MySQL timezone?
2008/03/26 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
JavaScript中关于iframe滚动条的去除和保留
2016/11/17 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
小程序接口的promise化的实现方法
2019/12/11 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
opencv实现图像平移效果
2021/03/24 Python
大学生毕业求职的自我评价
2013/09/29 职场文书
工商管理专业应届生求职信
2013/11/04 职场文书
金融与证券专业求职信
2014/06/22 职场文书
商铺消防安全责任书
2014/07/29 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
端午节活动总结报告
2015/02/11 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
导游词之塘栖古镇
2019/12/04 职场文书