這篇文章主要介紹了yii2.0整合阿里雲oss刪除單一檔案的方法,具有一定的參考價值,有興趣的小夥伴們可以參考一下
主要思路,在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; // 返回删除结果 }
以上是yii2.0刪除單一檔案的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!