栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

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

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

主要思路,在controller里边通过获得要删除的文件fileid,把fileid传递给model的deletefile方法进行处理,并返回处理结果。
在deletefile方法里边,先根据id找到对应的文件信息,然后删除数据里边的记录和阿里云oss里边的文件和本地的文件。

主要步骤如下:

1 首先是构建一个view视图,或者写一个ajax发送请求,此处代码略(让前端去写吧)。

2 在控制器里边接收参数,并转交给model。控制器UploadController.php里边的代码参考如下:


  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方法里边进行删除。

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/40357.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号