主要思路,在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文件的上传和删除已经写完了。当初自己也是遇到了很多问题,发现从网上找,竟然找不到理想的参考代码。所以才写了这几篇文章。希望对大家的开发有所帮助。毕竟水平有限,如果遇到考虑不周或者代码有误的地方,请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】