yii2.0整合阿里云oss刪除單個文件的法子

更新:2017-10-25    編輯:永不氣    來源:哥乖網    人氣:加載中...    字號:|

標簽:刪除  方法  整合  阿里  文件  單個  百度搜索

主要思路,在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文件的上傳和刪除已經寫完了。當初自己也是遇到了很多問題,發現從網上找,竟然找不到理想的參考代碼。

評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)

站點導航

您可能在找這些
黑龙江快乐十分走势图