1. 程式人生 > >PHP(Thinkphp5)實現上傳更換圖片

PHP(Thinkphp5)實現上傳更換圖片

問題引入:

 當點選修改時(前端傳值問題在這不多說,這裡主要講解後臺上傳,前臺傳值問題請參考我的上一篇部落格:https://blog.csdn.net/qq_40820862/article/details/83683980),使圖片發生替換.

 

例項解決思路:

由於上傳的圖片都指定在伺服器上的某個目錄,然後資料庫中記錄連結這個圖片的"連結",所以

1.先獲取前端傳入的id值和圖片

2.判斷是否選中了圖片才點選的上傳.

3.進行檔案上傳,選擇上傳目錄

4.獲取到上傳的檔案目錄(可用字串拼接出上傳目錄路徑)

5(可選)如果路徑存在問題(比如    ' \ '       ' / '  錯亂,可以用替換函式替換 )

6.將拼接的字串插入到資料庫中,使資料庫中的連結是你所上傳圖片的連結.

 

例項程式碼:

/**
	 * 輪播圖片 -> 獲取前端要修改的id和新圖片
	 */
	public function edit_images(Request $request, $id){

		// 接收前端傳來點選修改的id的值和前端在本地選擇想要更換上傳的圖片 -> 獲取表單上傳檔案 
		$file = request()->file('file');
		// 判斷是否有上傳的圖片
		if($file == null) {
			$this->error("很抱歉,您未選擇圖片!!");
		}
		// 進行檔案上傳
		$info = $file->rule('md5')->move('./static/index/images/slideshow/');
		// 獲取上傳檔案的目錄
		$saveName = $info->getsaveName();
		$str = "/Blogs/public/static/index/images/slideshow/". $saveName;
		// strtr 字串替換函式 -> 將路徑的\\替換成
		$str1 = strtr($str, '\\', '/');
		// 將拼接成的字串路徑插入到資料庫中
		$code = Db::execute("update all_heads set all_images='$str1' where id = '$id'");
		// 判斷資料是否成功插入到資料庫中
		if($code) {
			$this->redirect("allimages");
		} else {
			$this->error("很抱歉,輪播圖更換失敗!!");
		}
	}

 

更換成功後,資料庫中的圖片連結也跟隨著發生了變化.