Laravel使用之七牛對象存儲

圖片上傳,以用戶頭像avatar爲例php

爲節省本地磁盤,依託七牛的CDN節點加快訪問,從而選擇七牛的對象存儲來保存avatar.
下述,以流程概述爲主,據遇到的實際問題和需求來展開,僅列出關鍵代碼。

技術基礎html

Laravel5.4.36+webuploader(異步上傳)        //筆者環境如此

延伸laravel

  • clipboard.png,也可在composer.lock中查看
  • clipboard.png

普通上傳的實現

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

clipboard.png

clipboard.png

  • 普通上傳代碼中,說起的圖片保存的實際路徑
    clipboard.png

如上步驟,既已實現本地磁盤的存儲,那麼七牛上傳就不在話下了.只不過是換了個保存圖片的地址而已.web

七牛上傳的實現

1.如上所述,已實現了avatar的普通上傳。七牛上傳,則在該代碼基礎上來修改.
2.用七牛=>註冊七牛=>選擇並新建對象存儲空間=>從而獲得[空間名字和測試域名]

官網 https://www.qiniu.com/json

圖示一:新建
clipboard.png七牛雲存儲

圖示二:查詢
clipboard.pngapp

3.藉助第三方集成的SDk來處理上傳

https://github.com/zgldh/qini...composer

clipboard.png

4.修改普通上傳的代碼,有兩處:

  • 存儲位置

    Storage::disk('qiniu')->put($newFileName, File::get($request->file('file')->path()));
  • 返回圖片地址

    'path' => Storage::disk('qiniu')->getDriver()->downloadUrl($newFileName),    //這裏要返回的是七牛雲存儲的圖片的路徑(第三方提供的文檔中查找可用方法)

5.響應數據的檢查

clipboard.png

6.html中一併提交該圖片的返回地址到DB,那麼DB中就可查看到相關信息了

相關文章
相關標籤/搜索