首頁 > php框架 > Laravel > 主體

laravel的HTTP請求:取得cookie及上傳的文件

齐天大圣
發布: 2020-12-15 09:28:14
原創
1827 人瀏覽過

COOKIE

laravel在底層會對cookie值進行加密,並且使用授權碼進行簽署。所以,如果客戶端修改了cookie值,那麼就會失效。這樣,我們就不用擔心cookie偽造問題。

設定cookie值

設定cookie值會用到laravel回應(Response)的知識,這裡簡單帶過。

可以使用cookie函數來建立cookie,然後再透過response函數將cookie傳回給客戶端:

// cookie($name, $value, $minutes, $path, $domain, false, ...);
$cookie = cookie('username', 'php.cn', 3600);
return response('hello laravel')->cookie($cookie);
登入後複製

除了使用cookie函數外,還可以使用回應實例的cookie方法設定並傳回。此方法和cookie函數的參數是一致的。

return response('Hello World')->cookie(
    'name', 'php.cn', 3600
);
登入後複製

取得cookie值

#取得cookie值可以由兩種方法,以下示範這兩種方法:

use Illuminate\Http\Request;
$value = $request->cookie('name');
// 或
use Illuminate\Support\Facades\Cookie;
$value = Cookie::get('name');
登入後複製

取得上傳的檔案

laravel框架取得上傳的檔案及保持檔案非常的簡單。

取得上傳的檔案有兩種方法,使用file方法或動態屬性方法。此方法傳回Illuminate\Http\UploadedFile實例。

$logo = $request->file('logo');
// or
$logo = $request->logo;
登入後複製

當然可在取得檔案前判斷該檔案是否存在,這裡使用hasFile方法:

if ($request->hasFile('logo')) {
    $logo = $request->file('logo');
}
登入後複製

request請求實例還能對上傳的檔案進行驗證,我們非常推薦在儲存檔案前進行此操作:

if ($request->file('logo')->isValid()) {
    //
}
登入後複製

uploadFile實例有許多方法,可以取得上傳檔案的零時保存路徑、副檔名等資訊。以下示範取得文件類型後綴

$logo = $request->file('logo');
$logo->path();  // png
登入後複製

最後,將如何儲存文件,儲存檔案使用store方法,該方法的有兩個參數,第一個參數填入儲存檔案的路徑,第二個參數填入文件保存在哪個主目錄中(或第三方平台裡)。 laravel會自動產生一個唯一ID作為檔案名稱。資訊在設定檔config/filesystems.php中,如下:

'disks' => [
    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],
    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],
    's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
        'url' => env('AWS_URL'),
        'endpoint' => env('AWS_ENDPOINT'),
    ],
],
登入後複製

如果想自行設定儲存問價檔的檔名,則需要使用storeAs方法,該方法的第二個參數是要設定的文件名。

$request->file('logo')->storeAs('img/logo', '1.png');
登入後複製

最後,貼出一個完整的檔案上傳的程式碼範例:

html程式碼如下:

<form method="post" action="/index?a=32" enctype="multipart/form-data">
    @csrf
    <input type="file" name="logo" >
    <input type="submit" value="sub" />
</form>
登入後複製

儲存檔案程式碼如下:

if ($request->hasFile(&#39;logo&#39;)) {
    $logo = $request->file(&#39;logo&#39;);
    if ($logo->isValid()) {
        $ext = $logo->extension();
        $fileName = date(&#39;YmdHis&#39;) . mt_rand(10000,99999);
        $path = $logo->storeAs(&#39;img/logo&#39;, $fileName . &#39;.&#39; . $ext);
        dump($path); //"img/logo/2020121413351718218.png"
    }
}
登入後複製

以上是laravel的HTTP請求:取得cookie及上傳的文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!