1. 程式人生 > >ThinkPHP5.0圖片上傳生成縮圖例項程式碼

ThinkPHP5.0圖片上傳生成縮圖例項程式碼

很多朋友遇到這樣一個問題,圖片上傳生成縮圖,很多人在本機(win)測試成功,上傳到linux 伺服器後錯誤。

我也遇到同樣的問題。網上一查,有無數的人說是伺服器臨時檔案目錄許可權問題。

幾經思考後,發現並非如此。

其根本的原因是,儲存到變數的資訊是之前的,之後又move移動到了自己指定的目錄下,同時臨時檔案已經不存在。所以再生成縮圖的時候,需要open的,檔案地址應該是自己定義的目錄+檔名。然而很多例項文件中,還是使用的move 之前的資訊。

又加之在win伺服器下,move後,指定目錄已生成了檔案,同時臨時檔案未被刪除。所以能用move之前的資訊生成縮圖。

希望不多的言語能幫助遇到同樣問題的你。

下面在通過例項程式碼給大家介紹ThinkPHP5.0

圖片上傳生成縮圖的方法。

程式碼如下所示:

 1 <?php
 2 namespace app\common\controller;
 3 use app\common\model\Goods;
 4 class Tools
 5 {
 6  public static function upload_goods_img($whereName="", $width="", $height="")
 7  {
 8  // 開啟圖片的相對路徑
 9  $imgpath = config('img_path');
10  // 絕對路徑
11  $imgRootPath = config('imgRootPath');
12 $storeId = '自定義'; 13 $merchantId = '自定義'; 14 $old_filename = $storeId . $merchantId . time(); 15 $filename = $storeId . $merchantId . time() . mt_rand(1000, 9999); 16 $type = Goods::upload($whereName, $old_filename); 17 if($type) 18 { 19 $savepath = $imgRootPath . '/' . $whereName . '/' . $filename
. '.' . $type; 20 $thumbfile = $filename . '.' . $type; 21 $thumbName = $imgpath . '/' . $whereName . '/' . $thumbfile; 22 $image = \think\Image::open($imgpath . '/'. $whereName .'/' . $old_filename . '.' . $type); 23 $image->thumb($width, $height, \think\Image::THUMB_FIXED)->save($thumbName); 24 $data = [ 25 'access_url' => $imgRootPath . '/' . $whereName . '/' . $filename . '.' . $type, 26 'filename' => $thumbfile, 27 ]; 28 return $data; 29 } 30 } 31 }

呼叫:

 1 class Goods
 2 {
 3  public function upload_sku()
 4  {
 5  $whereName = 'goods/sku';
 6  $width = 750;
 7  $height = 750;
 8  $data = Tools::upload_goods_img($whereName,$width, $height);
 9  return returnJson(1, '上傳成功', $data);;
10  }
11 }