圖片上傳,以用戶頭像avatar爲例php
爲節省本地磁盤,依託七牛的CDN節點加快訪問,從而選擇七牛的對象存儲來保存avatar. 下述,以流程概述爲主,據遇到的實際問題和需求來展開,僅列出關鍵代碼。
技術基礎html
Laravel5.4.36+webuploader(異步上傳) //筆者環境如此
延伸laravel
public function webUpload(Request $request){ //1.是否有文件上傳及上傳文件的有效性判斷(file,是webUploader插件用來接收文件的) if ($request->hasFile('file') && $request->file('file')->isValid()) { $newFileName = md5($request->file('file')->getClientOriginalName() . time()) . '.' . $request->file('file')->getClientOriginalExtension(); //2.保存到該磁盤(爲啥?經過檢查/storage目錄的.gitignore,瞭解到該目錄下的文件才能被提交;且在軟連接的配置後可直接訪問) //文件名重複就會覆蓋=>所以要回到上一步=>自定義文件名 $newFileName Storage::disk('public')->put($newFileName, File::get($request->file('file')->path()));//Storage門面確認存儲位置,File門面獲取文件所有內容 //3.返回結果 return [ //laravel中會自動處理,返回成json數據 'code' => 1, 'message' => '文件上傳成功', //4.返回的必須是/public下可直接訪問的圖片地址. //因laravel中站點是直接指向/public的,所以圖片也要在/public下才能夠(而如前所設,圖片被保存在了/storage/app/public) //=>此時可經過軟連接配置來達到快捷訪問的效果 'path' => '/storage/' . $newFileName ]; } return [ 'code' => 0, 'message' => $request->file('file')->getErrorMessage(), ]; }
簡要說明git
php artisan storage:link
命令參考及最後效果github
如上步驟,既已實現本地磁盤的存儲,那麼七牛上傳就不在話下了.只不過是換了個保存圖片的地址而已.web
1.如上所述,已實現了avatar的普通上傳。七牛上傳,則在該代碼基礎上來修改. 2.用七牛=>註冊七牛=>選擇並新建對象存儲空間=>從而獲得[空間名字和測試域名]
官網 https://www.qiniu.com/json
圖示一:新建
七牛雲存儲
圖示二:查詢
app
3.藉助第三方集成的SDk來處理上傳
https://github.com/zgldh/qini...composer
4.修改普通上傳的代碼,有兩處:
存儲位置
Storage::disk('qiniu')->put($newFileName, File::get($request->file('file')->path()));
返回圖片地址
'path' => Storage::disk('qiniu')->getDriver()->downloadUrl($newFileName), //這裏要返回的是七牛雲存儲的圖片的路徑(第三方提供的文檔中查找可用方法)
5.響應數據的檢查
6.html中一併提交該圖片的返回地址到DB,那麼DB中就可查看到相關信息了