加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2021-03-05 17:25:15 所属栏目:PHP教程 来源:网络整理
导读:主要思路,在controller里边通过获得要删除的文件fileid,把fileid传递给model的deletefile方法进行处理,并返回处理结果。在deletefile方法里边,先根据id找到对应的文件信息,然后删除数据里边的记录和阿里云oss里边的文件和本地的文件。 主要步骤如下:

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

主要步骤如下:

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

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

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

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

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读