Ar In der folgenden Tutorial-Kolumne zu aLaravel
erfahren Sie, wie Laravel Github zum Speichern von Dateien integriert. Ich hoffe, dass es für alle hilfreich ist!
GitHub API-Einführung
Schnittstellendokumentation: docs.github.com/en/restSie müssen die sehr leistungsstarke GitHub-API verwenden, bei der Sie nur die Dateiinhaltsschnittstelle erstellen oder aktualisieren müssen.
Dateiinhalt erstellen oder aktualisieren
Anfrageadresse: api.github.com/repos/{owner}/{repo}/contents/{path}
PUT
参数
名称 |
类型 |
位置 |
描述 |
accept |
string |
header |
建议设置为 application/vnd.github.v3+json
|
owner |
string |
path |
用户名 |
repo |
string |
path |
仓库名 |
path |
string |
path |
文件存储路径 |
message |
string |
body |
必填 - The commit message |
content |
string |
body |
必填 - 新文件内容,使用 Base64 编码 |
sha |
string |
body |
如果要更新文件,则必填 - 被替换文件的 blob SHA |
branch |
string |
body |
分支名称 - 版本库的默认分支通常是 master
|
committer |
object |
body |
提交人 - 默认为已认证的用户 |
author |
object |
body |
文件的作者 - 默认为 committer ,如省略 committer ,则为认证的用户 |
committer
对象的属性
名称 |
描述 |
name (string) |
必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码 |
email (string) |
必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码 |
date (string) |
|
author
对象的属性
名称 |
描述 |
name (string) |
必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码 |
email (string) |
必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码 |
date | Parameter
Name |
Typ |
Ort |
Beschreibung |
accept
string🎜🎜header🎜🎜Es wird empfohlen, es auf application/vnd .github.v3+json 🎜🎜 |
🎜owner
🎜🎜string🎜🎜path🎜🎜username🎜🎜
🎜repo
🎜🎜 string🎜🎜path🎜🎜Warehouse-Name🎜🎜
🎜path
🎜🎜string🎜🎜path🎜🎜Dateispeicherpfad🎜🎜
🎜message
🎜🎜string 🎜🎜body🎜🎜🎜Erforderlich🎜 – Die Commit-Nachricht🎜🎜
🎜content
🎜🎜string🎜🎜body🎜🎜🎜Erforderlich🎜 – Der neue Dateiinhalt, codiert mit 🎜Base64 🎜🎜 🎜
🎜sha
🎜🎜string🎜🎜body🎜🎜🎜Erforderlich, wenn Sie die Datei aktualisieren möchten🎜 - Blob SHA der ersetzten Datei🎜🎜
🎜branch code>🎜🎜string🎜🎜body🎜🎜Zweigname – Der Standardzweig des Repositorys ist normalerweise <code>master
🎜🎜
🎜committer
🎜🎜object🎜🎜 body🎜🎜 Absender – Der Standardwert ist der authentifizierte Benutzer 🎜🎜
🎜author
🎜🎜object🎜🎜body🎜🎜Der Autor der Datei – Der Standardwert ist committer
, wenn committer
ist, handelt es sich um den authentifizierten Benutzer🎜🎜🎜🎜🎜committer
-Attribut des Objekts🎜
Name |
Beschreibung | 🎜
🎜name
(Zeichenfolge)🎜🎜🎜Erforderlich🎜 – Der Name des Autors bzw. Einreicher der Einreichung. Wenn name
weggelassen wird, erhalten Sie den Statuscode 422
🎜🎜
🎜email
(string)🎜🎜🎜erforderlich🎜 – der Autor der Einreichung oder die E-Mail-Adresse des Einreichers. Wenn email
weggelassen wird, erhalten Sie den Statuscode 422
🎜🎜
🎜date
(Zeichenfolge)🎜🎜🎜🎜🎜🎜🎜 🎜author
Attribute des Objekts🎜
Name |
Beschreibung | 🎜
🎜name
(string)🎜🎜🎜Erforderlich🎜 – Der Name des Autors oder Einreichers der Einreichung. Wenn name
weggelassen wird, erhalten Sie den Statuscode 422
🎜🎜
🎜email
(string)🎜🎜🎜erforderlich🎜 – der Autor der Einreichung oder die E-Mail-Adresse des Einreichers. Wenn email
weggelassen wird, erhalten Sie den Statuscode 422
🎜🎜
🎜date
(Zeichenfolge)🎜🎜🎜🎜🎜🎜🎜Authentifizierung
Es wird empfohlen, die zweite Methode zu verwenden.
Erstellen Sie ein Lager
Bei der Verwendung des GitHub-Warehouses als Image-Bett besteht das Problem darin, dass der Zugriff auf GitHub in China sehr langsam ist. Sie können jsDelivr CDN verwenden, um den Zugriff zu beschleunigen. jsDelivr ist eine kostenlose und quelloffene CDN-Lösung. Die Plattform ist der erste kostenlose CDN-Dienst, der das chinesische Festland mit dem Ausland verbindet. Sie verfügt über eine von der chinesischen Regierung ausgestellte ICP-Lizenz, sodass Sie sich über die Verwendung der Great Firewall keine Sorgen machen müssen von China. Um jsDelivr zur Beschleunigung des Zugriffs zu verwenden, müssen Sie den benutzerdefinierten Domänennamen auf https://cdn.jsdelivr.net/gh/username/image Bed Warehouse-Name
festlegen.
Laravel-Code
muss mehrere Konfigurationsparameter festlegen. Es wird empfohlen, diese in die Datei .env
einzufügen. 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"
Nach dem Login kopieren
<?php
return [
/**
* GitHub 仓库
*/
'repository' => env('GITHUB_FILE_REPOSITORY', ''),
/**
* 分支
*/
'branch' => env('GITHUB_FILE_BRANCH', 'master'),
/**
* Personal access token
*/
'token' => env('GITHUB_FILE_TOKEN', ''),
/**
* 存储路径,若 GitHub 仓库中没有,则自动创建
*/
'path' => env('GITHUB_FILE_PATH', ''),
/**
* 自定义域名
* 若不定义则使用 https://raw.githubusercontent.com/ 出于某些原因可能图片加载会很慢,甚至失败
* 建议使用 https://cdn.jsdelivr.net/gh/ 加速
*/
'domain' => env('GITHUB_FILE_DOMAIN', 'https://cdn.jsdelivr.net/gh/'),
/**
* 文件命名
* 1 - 以时间戳方式重命名
* 2 - 以随机字符串方式重命名
* 3 - 保持原名
* ......
*/
'name' => env('GITHUB_FILE_NAME', 1),
/**
* commit 记录
*/
'commit_message' => env('GITHUB_FILE_COMMIT_MESSAGE', ''),];
Nach dem Login kopieren
Erstellen Sie ein Trait
Wiederverwenden Upload-Funktion<?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))
]);
// 上传失败抛出一个错误,成功则返回 JSON
$body = $response->throw()->json();
// 上传成功后 GitHub API 返回的是 201,其实有了上一步这里的判断可以省略
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('未发现图片');
}
/**
* 生成图片名称
* @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();
}
}}
Nach dem Login kopieren
Verwenden Sie bei Bedarf 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
]
]);}
Nach dem Login kopieren
https://cdn.jsdelivr.net/gh/用户名/图床仓库名
。
Laravel 代码
需要设置几个配置参数,建议放到 .env
文件中。
rrreee然后在 config
下创建一个配置文件,我创建了一个 github-file.php
配置文件
rrreee创建一个 Trait
以复用上传功能
rrreee在需要的地方使用 UploadToGithub
Die neuesten fünf Laravel-Video-Tutorials (empfohlen)
Das obige ist der detaillierte Inhalt vonSprechen Sie darüber, wie Laravel GitHub zum Speichern von Dateien integriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!