這篇文章主要講解了“Laravel怎么集成GitHub來存儲(chǔ)文件”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Laravel怎么集成GitHub來存儲(chǔ)文件”吧!

創(chuàng)新互聯(lián)長(zhǎng)期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為托克托企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì),托克托網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
GitHub API 介紹
接口文檔:docs.github.com/en/rest
需要用到的是功能十分強(qiáng)大的 GitHub API,這里只需要 創(chuàng)建或更新文件內(nèi)容 接口。
創(chuàng)建或更新文件內(nèi)容
請(qǐng)求地址:api.github.com/repos/{owner}/{repo}/contents/{path}
請(qǐng)求方式:PUT
參數(shù)
| 名稱 | 類型 | 位置 | 描述 |
|---|---|---|---|
accept | string | header | 建議設(shè)置為 application/vnd.github.v3+json |
owner | string | path | 用戶名 |
repo | string | path | 倉(cāng)庫(kù)名 |
path | string | path | 文件存儲(chǔ)路徑 |
message | string | body | 必填- The commit message |
content | string | body | 必填- 新文件內(nèi)容,使用 Base64編碼 |
sha | string | body | 如果要更新文件,則必填- 被替換文件的 blob SHA |
branch | string | body | 分支名稱 - 版本庫(kù)的默認(rèn)分支通常是 master |
committer | object | body | 提交人 - 默認(rèn)為已認(rèn)證的用戶 |
author | object | body | 文件的作者 - 默認(rèn)為 committer,如省略 committer,則為認(rèn)證的用戶 |
committer 對(duì)象的屬性
| 名稱 | 描述 |
|---|---|
name (string) | 必填- 提交的作者或提交者的名字。如果省略 name 會(huì)收到 422 狀態(tài)代碼 |
email (string) | 必填- 提交的作者或提交者的電子郵件。如果省略 email 會(huì)收到 422 狀態(tài)代碼 |
date (string) |
author 對(duì)象的屬性
| 名稱 | 描述 |
|---|---|
name (string) | 必填- 提交的作者或提交者的名字。如果省略 name 會(huì)收到 422 狀態(tài)代碼 |
email (string) | 必填- 提交的作者或提交者的電子郵件。如果省略 email 會(huì)收到 422 狀態(tài)代碼 |
date (string) |
鑒權(quán)
官方提供了三種方式:
Basic authentication - 用戶名和密碼
OAuth3 Token - token
OAuth3 key/secret - client_id 和 client_secret (只支持查詢)
推薦使用第 2 種方式。
Settings > Developer settings > Personal access tokens > Generate new token
生成的 token 要保存好,只顯示一次。
一定要把倉(cāng)庫(kù)設(shè)置為公開的,目的是能夠使用 jsDelivr cdn 加速。
使用 GitHub 倉(cāng)庫(kù)作為圖床,存在的問題是國(guó)內(nèi)訪問 GitHub 的速度很慢,可以利用 jsDelivr CDN 來加速訪問。jsDelivr 是一個(gè)免費(fèi)開源的 CDN 解決方案,該平臺(tái)是首個(gè)打通中國(guó)大陸與海外的免費(fèi) CDN 服務(wù),擁有中國(guó)政府頒發(fā)的 ICP 許可證,無須擔(dān)心中國(guó)防火墻問題而影響使用。使用 jsDelivr 加速訪問,需要將自定義域名設(shè)置為 https://cdn.jsdelivr.net/gh/用戶名/圖床倉(cāng)庫(kù)名。
Laravel 代碼
需要設(shè)置幾個(gè)配置參數(shù),建議放到 .env 文件中。
GITHUB_FILE_REPOSITORY=YOUR_REPOSITORY GITHUB_FILE_BRANCH=master GITHUB_FILE_TOKEN=YOUR_TOKEN GITHUB_FILE_PATH=YOUR_PATH GITHUB_FILE_NAME=1 GITHUB_FILE_COMMIT_MESSAGE="YOUR COMMIT MESSAGE"
然后在 config 下創(chuàng)建一個(gè)配置文件,我創(chuàng)建了一個(gè) github-file.php 配置文件
<?php
return [
/**
* GitHub 倉(cāng)庫(kù)
*/
'repository' => env('GITHUB_FILE_REPOSITORY', ''),
/**
* 分支
*/
'branch' => env('GITHUB_FILE_BRANCH', 'master'),
/**
* Personal access token
*/
'token' => env('GITHUB_FILE_TOKEN', ''),
/**
* 存儲(chǔ)路徑,若 GitHub 倉(cāng)庫(kù)中沒有,則自動(dòng)創(chuàng)建
*/
'path' => env('GITHUB_FILE_PATH', ''),
/**
* 自定義域名
* 若不定義則使用 https://raw.githubusercontent.com/ 出于某些原因可能圖片加載會(huì)很慢,甚至失敗
* 建議使用 https://cdn.jsdelivr.net/gh/ 加速
*/
'domain' => env('GITHUB_FILE_DOMAIN', 'https://cdn.jsdelivr.net/gh/'),
/**
* 文件命名
* 1 - 以時(shí)間戳方式重命名
* 2 - 以隨機(jī)字符串方式重命名
* 3 - 保持原名
* ......
*/
'name' => env('GITHUB_FILE_NAME', 1),
/**
* commit 記錄
*/
'commit_message' => env('GITHUB_FILE_COMMIT_MESSAGE', ''),];創(chuàng)建一個(gè) Trait 以復(fù)用上傳功能
<?php
namespace App\Traits;use Exception;use Illuminate\Support\Str;
use Illuminate\Support\Facades\Http;
trait UploadToGithub{
public function uploadToGithub($file, $message = '')
{
$path = config('github-file.path') . '/' . $this->setFileName($file);
$repository = config('github-file.repository');
if ($file->isValid()) {
$url = "https://api.github.com/repos/$repository/contents/$path";
$response = Http::withToken(config('github-file.token'))->put($url, [
'message' => $message ?: config('github-file.commit_message'),
'content' => base64_encode(file_get_contents($file))
]);
// 上傳失敗拋出一個(gè)錯(cuò)誤,成功則返回 JSON
$body = $response->throw()->json();
// 上傳成功后 GitHub API 返回的是 201,其實(shí)有了上一步這里的判斷可以省略
if ($response->successful()) {
return config('github-file.domain')
? rtrim(config('github-file.domain'), '/') . '/' . trim($repository, '/') . '/' . ltrim($body['content']['path'], '/')
: $body['content']['download_url'];
}
}
throw new Exception('未發(fā)現(xiàn)圖片');
}
/**
* 生成圖片名稱
* @param $file
* @return mixed|string
*/
private function setFileName($file)
{
switch (config('github-file.name')) {
case 1:
return date('YmdHis', time()) . '.' . $file->getClientOriginalExtension();
case 2:
return Str::random(32) . '.' . $file->getClientOriginalExtension();
case 3:
default:
return $file->getClientOriginalName();
}
}}在需要的地方使用 UploadToGithub
use UploadToGithub;public function updload(Request $request){
$url = $this->uploadToGithub($request->file('file-field-name'));
return response()->json([
'code' => 200,
'message' => '上傳成功',
'data' => [
'url' => $url
]
]);}感謝各位的閱讀,以上就是“Laravel怎么集成GitHub來存儲(chǔ)文件”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Laravel怎么集成GitHub來存儲(chǔ)文件這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
本文標(biāo)題:Laravel怎么集成GitHub來存儲(chǔ)文件
當(dāng)前地址:http://chinadenli.net/article4/gsjjie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、響應(yīng)式網(wǎng)站、電子商務(wù)、網(wǎng)站改版、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)