黑馬在線教育項目---34-37、webuploader實現用戶頭像的異步上傳


黑馬在線教育項目---34-37、webuploader實現用戶頭像的異步上傳

一、總結

一句話總結:

啟迪:可以多看學習視頻,在看電影看電視的時候看的確是不錯的選擇

 

1、關於軟件的發行版本?

第1階段:alpha版本,內測版本;
第2階段:beta版本,公測版本;
第3階段:RC版本,(Release Candidate)候選版本,主要任務進行項目排錯;
第4階段:Release版本,穩定的發行版本;

 

2、webuploader上傳圖片官方提供了樣例比較完善的js?

也就是樣例用的js代碼:應該更加仔細的閱讀文檔

在案例中官網提供比較完善的js源碼文件,可以參考:
https://fex.baidu.com/webuploader/js/getting-started.js
找到這個文件中的針對“圖片上傳demo”的部分,將其復制出來,粘貼到新建的一個JavaScript文件中,在視圖中做引入即可。

 

3、chrome查看post請求攜帶的參數?

請求的Headers里面的Form Data里面可以查看

 

4、如何知道webuploader如何攜帶更多參數,比如_token?

可以在github上面查看issue,也可以直接百度

 

5、在storage門面中,有一個“磁盤”的概念,“磁盤”一共有三種:本地磁盤、公共磁盤、第三方磁盤,分別是什么(“磁盤”實質上就是一個目錄)?

1:本地磁盤(local磁盤),存放在local磁盤中的文件是不能被瀏覽器訪問到的,存儲在其中的文件一般都是項目的php代碼自身使用;【磁盤位置位於/Storage/app】
2:公共磁盤(public磁盤),存儲在該磁盤中的文件一般是允許瀏覽器進行訪問的;【磁盤位置位於:/Storage/app/public】
3:第三方磁盤:驅動形式的一種,允許開發者將文件上傳到第三方的服務器上;



磁盤存在一個配置文件,位置/config/filesystems.php;

 

6、Storage門面的通用文件保存方法?

Storage::disk(磁盤名) -> put(文件名,文件的內容);

 

7、默認情況下,瀏覽器是無法訪問到public磁盤目錄,但是其又想讓瀏覽器訪問,所以需要做一個“軟連接”的操作(當軟連接創建好之后。Public磁盤中的內容會被同步到/public/storage下?

#php artisan storage:link

 

8、webuploader選擇圖片的時候也會顯示之前的,也就是顯示多個,這顯然是錯的,如何解決?

用jquery刪除之前的就好:$('.thumbnail').remove()

 

 

 

二、webuploader實現用戶頭像的異步上傳

異步:ajax                         需要借助於ajax來實現目標的效果(無刷新)

 

由於異步的上傳代碼篇幅較大,也不好去調試,純自己手寫是很大的挑戰,一般都會使用一些開源成型的jQuery插件。

 

插件:webuploader(基於jQuery開發,百度公司開發)

官網:https://fex.baidu.com/webuploader/

下載地址:https://github.com/fex-team/webuploader/releases

 

關於軟件的發行版本:

第1階段:alpha版本,內測版本;

第2階段:beta版本,公測版本;

第3階段:RC版本,(Release Candidate)候選版本,主要任務進行項目排錯;

第4階段:Release版本,穩定的發行版本;

 

 

 

①解壓之后得到的目錄結構(4個圈起來的是比較重要的):

 

 

 

 

②需要引入資源

a. 將需要使用的整個webuploader目錄復制到當前的站點目錄下

 

 

 

b. 在視圖(views/admin/member/add.blade.php)中引入需要使用的js和css文件

 

 

 

引入css文件:

 

 

引入JavaScript文件:

 

 

 

③使用圖片上傳功能

地址:

https://fex.baidu.com/webuploader/getting-started.html#%E5%9B%BE%E7%89%87%E4%B8%8A%E4%BC%A0

a. 先引入html代碼(創建選擇文件的按鈕,創建存放文件信息的容器),替換掉之前的文件選擇按鈕

 

 

 

b. 實例化webuploader實例(初始化操作)

在案例中官網提供比較完善的js源碼文件,可以參考:

https://fex.baidu.com/webuploader/js/getting-started.js

找到這個文件中的針對“圖片上傳demo”的部分,將其復制出來,粘貼到新建的一個JavaScript文件中,在視圖中做引入即可。

 

 

 

c. 將avatar.js文件在視圖中引入

 

 

 

d. 根據實際的情況修改avatar.js文件

 

 

 

根據請求的數據,得知其上傳文件的默認name值是file

 

 

 

e. 根據路由信息,創建對應的控制器和方法去處理異步上傳的請求

異步文件上傳流程說明:

Ⅰ:產生異步的請求

Ⅱ:請求得有一個響應的方法(需要返回值,返回的內容是圖片的路徑;在此不需要進行數據表交互操作)

Ⅲ:當異步請求獲取到響應之后需要存儲圖片的地址(但是又沒必要給用戶看地址,因此可以使用隱藏域的方式進行存儲)

Ⅳ:當用戶提交表單的時候順帶提交隱藏域地址

創建需要的控制器文件:

#php artisan make:controller Admin/UploaderController

 

 

 

創建需要的處理方法webuploader

 

 

 

f. 解決csrf的驗證問題

由於異步提交和表單自身不是同一次請求,所以表單的csrftoken值不能被異步的ajax使用。

需要單獨給ajax異步添加csrf的token值。

針對webuploader在上傳的時候使用其他參數的說明,參考地址:

https://github.com/fex-team/webuploader/issues/145

 

 

在框架中如果引入的外部文件,需要注意在外部文件中不能使用模版引擎技術的內容,否則不解析

 

 

 

g. 實現上傳處理方法

在larvel項目中除了在上傳的時候可以使用move和store方法【都是request實例封裝的】之外,還可以使用高級的上傳文件保存方法(由storage門面提供的),詳情可以參考手冊:

 

 

Storage門面在使用的時候需要的注意事項:

Ⅰ:在storage門面中,有一個“磁盤”的概念,“磁盤”一共有三種:本地磁盤、公共磁盤、第三方磁盤;“磁盤”實質上就是一個目錄

Ⅱ:本地磁盤(local磁盤),存放在local磁盤中的文件是不能被瀏覽器訪問到的,存儲在其中的文件一般都是項目的php代碼自身使用;【磁盤位置位於/Storage/app】

Ⅲ:公共磁盤(public磁盤),存儲在該磁盤中的文件一般是允許瀏覽器進行訪問的;【磁盤位置位於:/Storage/app/public】

Ⅳ:第三方磁盤:驅動形式的一種,允許開發者將文件上傳到第三方的服務器上;

Ⅴ:磁盤存在一個配置文件,位置/config/filesystems.php;

 

補充:默認情況下,瀏覽器是無法訪問到public磁盤目錄,但是其又想讓瀏覽器訪問,所以需要做一個“軟連接”的操作(當軟連接創建好之后。Public磁盤中的內容會被同步到/public/storage下):

#php artisan storage:link

 

 

 

 

Storage門面的通用文件保存方法:

Storage::disk(磁盤名) -> put(文件名,文件的內容);

 

 

成功之后的返回值:

 

 

 

h. 異步請求回調處理

添加隱藏域,用於存放地址:

 

 

編寫回調代碼:

 

 

 

i. 數據入表

 

 

 

j. 細節完善:在上傳的時候只顯示一個文件

 

 

 

修改的代碼:

 

 

 

數據表的數據體現:

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM