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 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
Jan 27 PHP
深入PHP操作MongoDB的技术总结
Jun 02 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
php HTML无刷新提交表单
Apr 05 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
thinkphp5实现无限级分类
Feb 18 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 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 debug 安装技巧
2011/04/30 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
php的常量和变量实例详解
2017/06/27 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
javascript中的this详解
2014/12/08 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
ES6数组的扩展详解
2017/04/25 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
Python 正则表达式(转义问题)
2014/12/15 Python
Python中的ceil()方法使用教程
2015/05/14 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
不要用强制方法杀掉python线程
2017/02/26 Python
python递归实现快速排序
2018/08/18 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
区分python中的进程与线程
2020/08/13 Python
python 如何设置守护进程
2020/10/29 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
国际象棋商店:The Chess Store
2018/07/09 全球购物
应聘面试自我评价
2014/01/24 职场文书
美术教师个人工作总结
2015/02/06 职场文书
python计算列表元素与乘积详情
2022/08/05 Python