黑馬lavarel教程---7、文件上傳
一、總結
一句話總結:
在laravel里面實現文件的上傳是很簡單的,壓根不用引入第三方的類庫,作者把上傳作為一個簡單的http請求看待的。
1、在lavarel中作者把文件上傳看做什么?
一個簡單的http請求
在laravel里面實現文件的上傳是很簡單的,壓根不用引入第三方的類庫,作者把上傳作為一個簡單的http請求看待的。
2、要想表單能夠上傳(此處不考慮異步方式),則表單應該具備哪些要求?
a. 具有form標簽,method必須為post,必須具備enctype屬性;
b. 至少有一個input類型為file類型; 得具備一個提交按鈕;
3、lavarel文件上傳錯誤狀態碼error的取值?
0-7,但是沒有5,0表示成功。
4、文件上傳的本質(核心思想)?
文件的移動,move_upload_file
5、文件上傳步驟?
a. 先去判斷文件是否正常和存在
b. 獲取相關的信息(可選)
c. 保存文件(其實就是移動文件到新的目錄)
6、關於項目中使用路徑的說明?
如果路徑是給php代碼使用的,則路徑建議使用“./”形式;如果路徑是給瀏覽器使用的則建議使用“/”形式。
7、獲取文件上傳錯誤提示的代碼示例?
$request -> file(‘avatar’) -> getErrorMessage();
二、文件上傳
在laravel里面實現文件的上傳是很簡單的,壓根不用引入第三方的類庫,作者把上傳作為一個簡單的http請求看待的。使用時可以參考手冊。
(1)修改表結構,添加一個字段。
ALTER TABLE `member`
ADD COLUMN `avatar` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `email`;
(2)創建添加數據的表單和路由
添加路由:/home/test/test14
創建展示視圖的方法並且展示視圖
創建視圖頁面並且添加csrf_token
回顧:要想表單能夠上傳(此處不考慮異步方式),則表單應該具備哪些要求?
答:
a. 具有form標簽,method必須為post,必須具備enctype屬性;
b. 至少有一個input類型為file類型;
c. 得具備一個提交按鈕;
(3)在控制器中,添加上傳業務處理邏輯
【此處操作建議查看手冊】
關於上傳錯誤狀態碼error的取值:0-7,但是沒有5,0表示成功。
問題:請你說出文件上傳的本質(核心思想)?文件的移動,move_upload_file
更多的方法請訪問:
http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/File/UploadedFile.html
思路:
a. 先去判斷文件是否正常和存在
b. 獲取相關的信息(可選)
c. 保存文件(其實就是移動文件到新的目錄)
獲取文件的方式:既可以通過file方法來獲取也可以通過動態屬性來獲取,二選一。
(4)創建上傳文件的保存路徑
關於項目中使用路徑的說明:
如果路徑是給php代碼使用的,則路徑建議使用“./”形式;如果路徑是給瀏覽器使用的則建議使用“/”形式。
為了保存的文件不被覆蓋,建議在保存文件的同時對文件名進行盡量唯一的重命名:
(5)注意:如果使用的是create方法添加數據到數據表中,則這里還要修改一下模型里面的一個fillable屬性,代表允許插入到數據庫的字段
將數據寫入數據表:
數據表的結果:
如果上傳出現了錯誤,一定要使用獲取錯誤信息的方法:
$request -> file(‘avatar’) -> getErrorMessage();