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

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?IlluminateHttpRequest; $value?=?$request->cookie('name'); //?或 use?IlluminateSupportFacadesCookie; $value?=?Cookie::get('name');

獲取上傳的文件

laravel框架獲取上傳的文件及保持文件非常的簡單。

獲取上傳的文件有兩種方法,使用file方法或動態屬性方法。該方法返回IlluminateHttpUploadedFile實例。

$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代碼如下:


????@csrf ???? ????

保存文件代碼如下:

if?($request->hasFile('logo'))?{ ????$logo?=?$request->file('logo'); ????if?($logo->isValid())?{ ????????$ext?=?$logo->extension(); ????????$fileName?=?date('YmdHis')?.?mt_rand(10000,99999); ????????$path?=?$logo->storeAs('img/logo',?$fileName?.?'.'?.?$ext); ????????dump($path);?//"img/logo/2020121413351718218.png" ????} }

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享