主要思路,在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){ // 如果<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>id为0
$res['errmsg'] = '<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>失败,请重试'; // 准备返回数据
return $res; // 返回结果
}
$model = new UploadForm(); // 实例化model
$delres = $model->deletefile($postdata); // 根据id<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>deletefile<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>
if ($delres['error']==0){ // 如果<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>成功
$res['error'] = 0; // 准备返回信息
} else {
$res['errmsg'] = $delres['errmsg']; // 如果<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>失败,准备返回信息
}
} else {
$res['errmsg'] = '非法请求'; // 主要考虑post请求,get请求请自行<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a><a href="/tag/daima/" target="_blank" class="keywords">代码</a>
}
return $res; // 返回<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>结果
}
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) { // 如果找到了<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>的记录
// 这里边的验证可以更丰富一些,比如验证<a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>是否有权限<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>该<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>,<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>是否属于该<a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>等等
$ossfile = $fileinfo['ossfile']; // <a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>ossfile
$realfile = $fileinfo['filePath']; // <a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>服务器上的<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>
$owner = $fileinfo['userid']; // <a href="/tag/huoqu/" target="_blank" class="keywords">获取</a><a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/tupian/" target="_blank" class="keywords">图片</a><a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>的id
$operator = Yii::$app->user->id; // <a href="/tag/huoqu/" target="_blank" class="keywords">获取</a><a href="/tag/shanchu/" target="_blank" class="keywords">删除</a><a href="/tag/tupian/" target="_blank" class="keywords">图片</a>的<a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>
if ($owner != $operator) { // 如果<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a><a href="/tag/tupian/" target="_blank" class="keywords">图片</a>的<a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>不是<a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a>的<a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>,报错并返回
$res['errmsg'] = '您<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>的<a href="/tag/tupian/" target="_blank" class="keywords">图片</a>不存在';
return $res;
}
$trans = Yii::$app->db->beginTransaction(); // 开启事务
try {
$delstatus = Yii::$app->db->createCommand()->delete('file','id = ' . $fileid)->execute();
//<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a><a href="/tag/shujuku/" target="_blank" class="keywords">数据库</a>里边的记录
if ($delstatus) { // 如果<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>成功
if (Yii::$app->Aliyunoss->delete($ossfile)) { //<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>阿里云oss上的<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>
@unlink($realfile); // <a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>服务器上的<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>
$res['error'] = 0; // 准备返回信息
$trans->commit(); // 提交事务
}
}
$trans->rollBack(); // <a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>失败,事务回滚
} catch (Exception $e) { // 发生异常
$res['errmsg'] = '<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>失败'; // 准备返回信息
$trans->rollBack(); // 事务回滚
}
} else {
$res['errmsg'] = '<a href="/tag/tupian/" target="_blank" class="keywords">图片</a>不存在,请重试'; // <a href="/tag/tupian/" target="_blank" class="keywords">图片</a>不存在
}
return $res; // 返回<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>结果
}
阿里云oss文件的上传和删除已经写完了。当初自己也是遇到了很多问题,发现从网上找,竟然找不到理想的参考代码。所以才写了这几篇文章。希望对大家的开发有所帮助。毕竟水平有限,如果遇到考虑不周或者代码有误的地方,请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程之家网站的支持!