yii2.0整合阿里云oss删除单个文件的方法

发布时间 - 2026-01-11 03:18:58    点击率:

主要思路,在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文件的上传和删除已经写完了。当初自己也是遇到了很多问题,发现从网上找,竟然找不到理想的参考代码。所以才写了这几篇文章。希望对大家的开发有所帮助。毕竟水平有限,如果遇到考虑不周或者代码有误的地方,请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# yii2  # oss  # yii  # 删除  # 删除文件  # yii2.0整合阿里云oss上传单个文件的示例  # yii2.0整合阿里云oss的示例代码  # Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例  # 不存在  # 主键  # 器上  # 上传  # 在此  # 找不到  # 请重试  # 写了  # 报错  # 该用户  # 该文件  # 小编  # 给我留言  # 上传图片  # 感谢大家  # 有错误  # 几篇  # 文件上传  # 构建一个  # 找到了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: android nfc常用标签读取总结  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Firefox Developer Edition开发者版本入口  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  java中使用zxing批量生成二维码立牌  EditPlus中的正则表达式实战(6)  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  详解CentOS6.5 安装 MySQL5.1.71的方法  网站制作价目表怎么做,珍爱网婚介费用多少?  如何用狗爹虚拟主机快速搭建网站?  米侠浏览器网页背景异常怎么办 米侠显示修复  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  网站制作软件有哪些,制图软件有哪些?  教学论文网站制作软件有哪些,写论文用什么软件 ?  Laravel如何使用查询构建器?(Query Builder高级用法)  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  nginx修改上传文件大小限制的方法  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  桂林网站制作公司有哪些,桂林马拉松怎么报名?  高端建站如何打造兼具美学与转化的品牌官网?  Laravel如何实现本地化和多语言支持?(i18n教程)  javascript基于原型链的继承及call和apply函数用法分析  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何用好域名打造高点击率的自主建站?  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何用美橙互联一键搭建多站合一网站?  高防服务器租用首荐平台,企业级优惠套餐快速部署  java获取注册ip实例  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  Laravel如何实现API速率限制?(Rate Limiting教程)  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel如何处理CORS跨域请求?(配置示例)  php 三元运算符实例详细介绍  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  独立制作一个网站多少钱,建立网站需要花多少钱?  新三国志曹操传主线渭水交兵攻略  高端智能建站公司优选:品牌定制与SEO优化一站式服务  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何正确选择百度移动适配建站域名?