Laravel が GitHub を統合してファイルを保存する方法について話す

藏色散人
リリース: 2022-01-10 11:36:27
転載
2311 人が閲覧しました

次のチュートリアルコラムでは、Laravel が GitHub を統合してファイルを保存する方法を紹介します。

GitHub API の概要

インターフェイスのドキュメント: docs.github.com/en/rest使用する必要があるものは非常に強力な GitHub API で、ファイル コンテンツ インターフェイスを作成または更新するだけで済みます。

ファイル コンテンツの作成または更新

リクエスト アドレス: api.github.com/repos/{owner}/ {repo}/content/{path}

  • リクエストメソッド:

    PUT
  • # #パラメータ

名前

タイプ位置説明stringheader##所有者パスリポパスstringpathファイルストレージパスRequiredcontentRequired ## を使用してエンコードされた新しいファイル コンテンツファイルを更新する場合は必須 - 置換されるファイルの BLOB SHA string ブランチ名 - リポジトリのデフォルトのブランチは通常、 mastercommittercommitter、committer オブジェクトの属性説明
accept
application/vnd に設定することをお勧めします.github.v3 json 文字列
ユーザー名 文字列
ウェアハウス名 ##path
message ##string body
- コミットメッセージ stringbody
- Base64 #sha stringbody
branch body
object bodyCommitter - デフォルト認証されたユーザーのファイルの作成者
author object body - デフォルトは
を省略した場合、認証されたユーザーになります committer 名前

##名前 (文字列) - 提出物の作成者または提出者の名前。 が省略された場合、422 ステータス コード 説明
必須name
##email (文字列) # が返されます。 ##必須 - 提出物の作成者または提出者の電子メール。 email を省略した場合、422 ステータス コード
date (文字列)## が返されます。 author オブジェクトのプロパティ
名前

name (文字列)

必須 - の作成者または送信者提出物名。 name422##email (文字列)emaildate (文字列)## が返されます。 ##

認証

公式は 3 つの方法を提供しています:

  • 基本認証 - ユーザー名とパスワード

  • #OAuth2 トークン - トークン

  • OAuth2 キー/シークレット - client_id および client_secret (クエリのみをサポート)

推奨方法 2。

トークンの設定
[設定] > [開発者設定] > [個人用アクセス トークン] > [新しいトークンの生成]

Laravel が GitHub を統合してファイルを保存する方法について話す

生成されたトークンは保存され、一度だけ表示されます。

ウェアハウスの作成

jsDelivr CDN を使用して高速化できるように、ウェアハウスは必ずパブリックに設定してください。

GitHub ウェアハウスを画像ベッドとして使用する場合の問題は、中国の GitHub へのアクセスが非常に遅いことです。jsDelivr CDN を使用するとアクセスを高速化できます。 jsDelivr は、無料のオープンソース CDN ソリューションです。このプラットフォームは、中国本土と海外を接続するための初の無料 CDN サービスです。中国政府発行の ICP ライセンスを取得しているため、グレート ファイアウォールの使用を心配する必要はありません。中国の。 jsDelivr を使用してアクセスを高速化するには、カスタム ドメイン名を

https://cdn.jsdelivr.net/gh/username/image bed ウェアハウス名 に設定する必要があります。

Laravel コード

では、いくつかの構成パラメータを設定する必要があります。それらを

.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 の下に設定ファイルを作成します。github-file.php 設定ファイルを作成しました。

<?php
return [
 /**
 * GitHub 仓库
 */
 &#39;repository&#39; => env(&#39;GITHUB_FILE_REPOSITORY&#39;, &#39;&#39;),

 /**
 * 分支
 */
 &#39;branch&#39; => env(&#39;GITHUB_FILE_BRANCH&#39;, &#39;master&#39;),

 /**
 * Personal access token
 */
 &#39;token&#39; => env(&#39;GITHUB_FILE_TOKEN&#39;, &#39;&#39;),

 /**
 * 存储路径,若 GitHub 仓库中没有,则自动创建
 */
 &#39;path&#39; => env(&#39;GITHUB_FILE_PATH&#39;, &#39;&#39;),

 /**
 * 自定义域名
 * 若不定义则使用 https://raw.githubusercontent.com/ 出于某些原因可能图片加载会很慢,甚至失败
 * 建议使用 https://cdn.jsdelivr.net/gh/ 加速
 */
 &#39;domain&#39; => env(&#39;GITHUB_FILE_DOMAIN&#39;, &#39;https://cdn.jsdelivr.net/gh/&#39;),

 /**
 * 文件命名
 * 1 - 以时间戳方式重命名
 * 2 - 以随机字符串方式重命名
 * 3 - 保持原名
 * ......
 */
 &#39;name&#39; => env(&#39;GITHUB_FILE_NAME&#39;, 1),

 /**
 * commit 记录
 */
 &#39;commit_message&#39; => env(&#39;GITHUB_FILE_COMMIT_MESSAGE&#39;, &#39;&#39;),];
ログイン後にコピー

Create a

Trait アップロード機能を再利用する

<?php
namespace App\Traits;use Exception;use Illuminate\Support\Str;
use Illuminate\Support\Facades\Http;
trait UploadToGithub{
    public function uploadToGithub($file, $message = &#39;&#39;)
    {
        $path = config(&#39;github-file.path&#39;) . &#39;/&#39; . $this->setFileName($file);
        $repository = config(&#39;github-file.repository&#39;);

        if ($file->isValid()) {
            $url = "https://api.github.com/repos/$repository/contents/$path";

            $response = Http::withToken(config(&#39;github-file.token&#39;))->put($url, [
                &#39;message&#39; => $message ?: config(&#39;github-file.commit_message&#39;),
                &#39;content&#39; => base64_encode(file_get_contents($file))
            ]);

            // 上传失败抛出一个错误,成功则返回 JSON
            $body = $response->throw()->json();

            // 上传成功后 GitHub API 返回的是 201,其实有了上一步这里的判断可以省略
            if ($response->successful()) {
                return config(&#39;github-file.domain&#39;)
                    ? rtrim(config(&#39;github-file.domain&#39;), &#39;/&#39;) . &#39;/&#39; . trim($repository, &#39;/&#39;) . &#39;/&#39; . ltrim($body[&#39;content&#39;][&#39;path&#39;], &#39;/&#39;)
                    : $body[&#39;content&#39;][&#39;download_url&#39;];
            }
        }

        throw new Exception(&#39;未发现图片&#39;);
    }

    /**
     * 生成图片名称
     * @param $file
     * @return mixed|string
     */
    private function setFileName($file)
    {
        switch (config(&#39;github-file.name&#39;)) {
            case 1:
                return date(&#39;YmdHis&#39;, time()) . &#39;.&#39; . $file->getClientOriginalExtension();
            case 2:
                return Str::random(32) . &#39;.&#39; . $file->getClientOriginalExtension();
            case 3:
            default:
                return $file->getClientOriginalName();
        }
    }}
ログイン後にコピー

必要に応じて使用する

UploadToGithub

use UploadToGithub;public function updload(Request $request){
    $url = $this->uploadToGithub($request->file(&#39;file-field-name&#39;));
    
    return response()->json([
        &#39;code&#39; => 200,
        &#39;message&#39; => &#39;上传成功&#39;,
        &#39;data&#39; => [
            &#39;url&#39; => $url
        ]
    ]);}
ログイン後にコピー

最新 5 つの Laravel ビデオ チュートリアル ######(推奨)

が省略された場合、 ステータス コード
# が返されます。 ##必須 - 提出物の作成者または提出者の電子メール。 を省略した場合、422 ステータス コード

以上がLaravel が GitHub を統合してファイルを保存する方法について話すの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!