yii2.0整合阿里云oss刪除單個(gè)文件的方法
主要思路,在controller里邊通過獲得要?jiǎng)h除的文件fileid,把fileid傳遞給model的deletefile方法進(jìn)行處理,并返回處理結(jié)果。
在deletefile方法里邊,先根據(jù)id找到對(duì)應(yīng)的文件信息,然后刪除數(shù)據(jù)里邊的記錄和阿里云oss里邊的文件和本地的文件。
主要步驟如下:
1 首先是構(gòu)建一個(gè)view視圖,或者寫一個(gè)ajax發(fā)送請(qǐng)求,此處代碼略(讓前端去寫吧)。
2 在控制器里邊接收參數(shù),并轉(zhuǎn)交給model??刂破鱑ploadController.php里邊的代碼參考如下:
/**
* 根據(jù)fileid刪除文件
* @return mixed 刪除是否成功
*/
public function actionDeletefile()
{
$res['error'] = 1; // 準(zhǔn)備返回?cái)?shù)據(jù)
Yii::$app->response->format = Response::FORMAT_JSON; // 設(shè)置返回格式
if (Yii::$app->request->isPost){ // 如果是post請(qǐng)求
$postdata = Yii::$app->request->post('fileid',0); // 從post里邊獲取文件id
if ($postdata==0){ // 如果文件id為0
$res['errmsg'] = '刪除失敗,請(qǐng)重試'; // 準(zhǔn)備返回?cái)?shù)據(jù)
return $res; // 返回結(jié)果
}
$model = new UploadForm(); // 實(shí)例化model
$delres = $model->deletefile($postdata); // 根據(jù)id調(diào)用deletefile方法
if ($delres['error']==0){ // 如果刪除成功
$res['error'] = 0; // 準(zhǔn)備返回信息
} else {
$res['errmsg'] = $delres['errmsg']; // 如果刪除失敗,準(zhǔn)備返回信息
}
} else {
$res['errmsg'] = '非法請(qǐng)求'; // 主要考慮post請(qǐng)求,get請(qǐng)求請(qǐng)自行修改代碼
}
return $res; // 返回刪除結(jié)果
}
3 當(dāng)controller把文件id轉(zhuǎn)移給UploadForm.php以后,在deletefile方法里邊進(jìn)行刪除。
/**
* 刪除阿里云oss里存儲(chǔ)的文件和數(shù)據(jù)庫(kù)里邊保存到文件上傳信息
* @param $fileid 文件表里邊的主鍵id
* @return boolean 刪除是否成功
*/
public function deletefile($fileid)
{
$res['error'] = 1; // 1表示默認(rèn)有錯(cuò)誤。
$fileinfo = Yii::$app->db->createCommand('select ossfile,filePath,userid from file where id=:id')->bindParam(':id', $fileid)->queryOne();
// 根據(jù)主鍵從數(shù)據(jù)庫(kù)里邊查詢文件的信息,至少要一個(gè)服務(wù)器文件的完整路徑(用來刪除服務(wù)器文件)和一個(gè)ossfile的名稱(刪除阿里云oss里邊的文件)
if (count($fileinfo) > 0) { // 如果找到了文件的記錄
// 這里邊的驗(yàn)證可以更豐富一些,比如驗(yàn)證用戶是否有權(quán)限刪除該文件,文件是否屬于該用戶等等
$ossfile = $fileinfo['ossfile']; // 獲取ossfile
$realfile = $fileinfo['filePath']; // 獲取服務(wù)器上的文件
$owner = $fileinfo['userid']; // 獲取上傳圖片用戶的id
$operator = Yii::$app->user->id; // 獲取刪除圖片的用戶
if ($owner != $operator) { // 如果刪除圖片的用戶不是上傳的用戶,報(bào)錯(cuò)并返回
$res['errmsg'] = '您刪除的圖片不存在';
return $res;
}
$trans = Yii::$app->db->beginTransaction(); // 開啟事務(wù)
try {
$delstatus = Yii::$app->db->createCommand()->delete('file', 'id = ' . $fileid)->execute();
//刪除數(shù)據(jù)庫(kù)里邊的記錄
if ($delstatus) { // 如果刪除成功
if (Yii::$app->Aliyunoss->delete($ossfile)) { //刪除阿里云oss上的文件
@unlink($realfile); // 刪除服務(wù)器上的文件
$res['error'] = 0; // 準(zhǔn)備返回信息
$trans->commit(); // 提交事務(wù)
}
}
$trans->rollBack(); // 刪除失敗,事務(wù)回滾
} catch (Exception $e) { // 發(fā)生異常
$res['errmsg'] = '刪除失敗'; // 準(zhǔn)備返回信息
$trans->rollBack(); // 事務(wù)回滾
}
} else {
$res['errmsg'] = '圖片不存在,請(qǐng)重試'; // 圖片不存在
}
return $res; // 返回刪除結(jié)果
}
阿里云oss文件的上傳和刪除已經(jīng)寫完了。當(dāng)初自己也是遇到了很多問題,發(fā)現(xiàn)從網(wǎng)上找,竟然找不到理想的參考代碼。所以才寫了這幾篇文章。希望對(duì)大家的開發(fā)有所幫助。畢竟水平有限,如果遇到考慮不周或者代碼有誤的地方,請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Laravel框架實(shí)現(xiàn)的rbac權(quán)限管理操作示例
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)的rbac權(quán)限管理操作,結(jié)合實(shí)例形式分析了Laravel框架權(quán)限控制rbac相關(guān)數(shù)據(jù)庫(kù)創(chuàng)建、讀寫及權(quán)限判斷等操作技巧,需要的朋友可以參考下2019-01-01
PHPWind9.0手動(dòng)屏蔽驗(yàn)證碼解決后臺(tái)關(guān)閉驗(yàn)證碼但是依然顯示的問題
這篇文章主要介紹了PHPWind9.0手動(dòng)屏蔽驗(yàn)證碼解決后臺(tái)關(guān)閉驗(yàn)證碼但是依然顯示的問題的相關(guān)資料,需要的朋友可以參考下2016-08-08
Yii2實(shí)現(xiàn)ActiveForm ajax提交
這篇文章主要 為大家詳細(xì)介紹了Yii2實(shí)現(xiàn)ActiveForm ajax提交的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
這篇文章主要介紹了如何在php與js中分別獲取客戶度mac地址的方法,需要的朋友可以參考下2013-07-07
PHP 自動(dòng)加載的簡(jiǎn)單實(shí)現(xiàn)(推薦)
下面小編就為大家?guī)硪黄狿HP 自動(dòng)加載的簡(jiǎn)單實(shí)現(xiàn)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08
詳解thinkphp+redis+隊(duì)列的實(shí)現(xiàn)代碼
本篇文章主要介紹了thinkphp+redis+隊(duì)列的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
php array_multisort 對(duì)數(shù)組進(jìn)行排序詳解及實(shí)例代碼
這篇文章主要介紹了php array_multisort 對(duì)數(shù)組進(jìn)行排序詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-10-10

