2019年12月18日 星期三

【laravel】storage 相關

1.在 laravel 目錄輸入,預設目錄為 /storage/app/
   php artisan storage:link

2.建立檔案,在程式碼中加入
   Storage::disk('public')->put('test.txt', 'contents...');

3.取得剛剛新建立檔案的網址
   echo asset('storage/test.txt');

4.取得檔案的內容
   echo Storage::get('test.txt');

5.下載檔案
   Storage::download('test.txt');

6.檔案上傳
   $path = request()->image->store('public'); // 將欄位名image的圖片存入/storage/app/public
   request()->image->storeAs($dir, $file_name); // 將檔案以 $file_name 存入 $dir,$dir='public/';

7.取得副檔名
   $ext = request()->image->extension();

8.是否有檔案
   request()->hasFile('image');

9.照片上傳+縮圖範例
    
/**
 *  圖片上傳 + 縮圖
 * @param  [request]$img     $request->file
 * @param  [string] $feild   欄位名稱
 * @param  array  $thumb_arr 縮圖 [[100,100],[250,250]] 會有兩個thumb資料目錄,沒輸入就不縮圖
 * @return [array]           result:是否成功 file_name、file_path
 */
public function upload_image($img, $feild, $thumb_arr=[])
{
    $check = 1;
    $ext = $img->extension();
    if (!$this->fileExtCheck($ext)){
        $check = 0;
    }

    $admin_path = $this->admin_path.'/'.$feild;

    Storage::makeDirectory('public/'.$admin_path);

    $file_name = $this->getFileName($img->getClientOriginalName());
    $directory = $this->la_storage_path.'/'.$admin_path;
    $save_file = $directory.'/'.$file_name;
    if (!Image::make($img)->save($save_file)){
        $check = 0;
    }

    if (isset($thumb_arr)){
        foreach($thumb_arr as $thumb){
            $thumb_name = 'thumb_'.$thumb[0].'_'.$thumb[1];
            Storage::makeDirectory('public/'.$admin_path.'/'.$thumb_name);
            $themb_img = $directory.'/'.$thumb_name.'/'.$file_name;
            $t = Image::make($img)->resize($thumb[0],$thumb[1],function($constraint){
                $constraint->aspectRatio();
            })->save($themb_img);
            if (!$t){
                $check = 0;
            }
        }
    }

    if ($check)
        return ['result'=>'ok', 'file_name'=>$file_name, 'file_path'=>'storage/'.$admin_path.'/'.$file_name];
    else 
        return ['result'=>'err'];
}
10.刪除照片及縮圖
    
public function unlink_img($img, $thumb_arr=[])
{
    if (is_file($this->root.'/'.$img)) unlink($this->root.'/'.$img);

    if (isset($thumb_arr)){
        foreach($thumb_arr as $thumb){
            $thumb_name = 'thumb_'.$thumb[0].'_'.$thumb[1];
            $thumb_img = $this->root.'/'.dirname($img).'/'.$thumb_name.'/'.basename($img);
            if (is_file($thumb_img)) unlink($thumb_img);
        }
    }
}

5 則留言: