Rumah > rangka kerja php > Laravel > teks badan

Bercakap tentang cara Laravel menyepadukan GitHub untuk menyimpan fail

藏色散人
Lepaskan: 2022-01-10 11:36:27
ke hadapan
2320 orang telah melayarinya

Pengenalan API GitHub

Dokumentasi antara muka: docs.github.com/en/restApa yang anda perlu gunakan ialah API GitHub yang sangat berkuasa, di sini anda hanya perlu mencipta atau mengemas kini antara muka kandungan fail.

Buat atau kemas kini kandungan fail

Alamat permintaan: api.github.com/repos/{owner}/ {repo}/contents/{path}

    Kaedah permintaan:
  • PUT

    Parameter
Pengirim - Lalai ialah pengguna yang disahkan
Nama Jenis Kedudukan Penerangan
terima rentetan header Cadangan Tetapkan kepada application/vnd.github.v3 json
owner string laluan nama pengguna
repo rentetan laluan Nama gudang
laluan rentetan laluan Laluan storan fail
mesej rentetan body

Diperlukan - Mesej komit

kandungan rentetan body Diperlukan - Kandungan fail baharu, menggunakan Base64 pengekodan
sha code> string body
名称 类型 位置 描述
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,则为认证的用户
Diperlukan jika anda ingin mengemas kini fail

- gumpalan SHA bagi fail yang diganti

cawangan rentetan badan Nama cawangan - versi repositori lalai cawangan biasanya master
committer objek body
objek body Pengarang fail - lalai ialah
名称 描述
name (string) 必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码
email (string) 必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码
date (string)
, jika

ditinggalkan, ia adalah pengguna yang disahkan

author Atribut objek
名称 描述
name (string) 必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码
email (string) 必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码
date (string)
Nama Penerangan
nama (rentetan) Diperlukan - Nama pengarang atau pengirim penyerahan. Jika nama ditinggalkan, anda akan menerima 422 kod status
e-mel (rentetan) td> Diperlukan - E-mel pengarang atau pengirim penyerahan. Jika e-mel ditinggalkan, anda akan menerima 422 kod status
tarikh (rentetan) td>
Sifat objek Diperlukan - Nama pengarang atau penghantar penyerahan. Jika nama ditinggalkan, anda akan menerima 422 kod status
Nama Penerangan
nama (rentetan)
e-mel (rentetan) td> Diperlukan - E-mel pengarang atau pengirim penyerahan. Jika e-mel ditinggalkan, anda akan menerima 422 kod status
tarikh (rentetan) td>

Pengesahan

Secara rasmi menyediakan tiga kaedah:

  • Pengesahan asas - nama pengguna dan kata laluan

  • Token OAuth2 - token

  • Kunci/rahsia OAuth2 - client_id dan client_secret (hanya menyokong pertanyaan)

Kaedah Disyorkan 2.

Tetapkan token

Tetapan > Token akses peribadi >

Token yang dijana hendaklah disimpan dan hanya dipaparkan sekali.

Bercakap tentang cara Laravel menyepadukan GitHub untuk menyimpan fail

Buat gudang

Pastikan anda menetapkan gudang sebagai awam supaya ia boleh dipercepatkan menggunakan jsDelivr CDN.

Menggunakan gudang GitHub sebagai katil imej, masalahnya ialah akses kepada GitHub di China sangat perlahan, anda boleh menggunakan jsDelivr CDN untuk mempercepatkan akses. jsDelivr ialah penyelesaian CDN percuma dan sumber terbuka Platform ini adalah perkhidmatan CDN percuma pertama untuk menghubungkan tanah besar China dan luar negara Ia mempunyai lesen ICP yang dikeluarkan oleh kerajaan China, jadi tidak perlu risau tentang penggunaan Great Firewall dari China. Untuk menggunakan jsDelivr untuk mempercepatkan akses, anda perlu menetapkan nama domain tersuai kepada

.

https://cdn.jsdelivr.net/gh/用户名/图床仓库名

Kod Laravel

perlu menetapkan beberapa parameter konfigurasi, adalah disyorkan untuk meletakkannya dalam fail .

Kemudian buat profil di bawah .env, saya mencipta profil

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"
Salin selepas log masuk

configMencipta github-file.php untuk menggunakan semula fungsi muat naik

<?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;),];
Salin selepas log masuk

Gunakan di mana perluTrait

<?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();
        }
    }}
Salin selepas log masuk

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
        ]
    ]);}
Salin selepas log masuk
Lima tutorial video Laravel terbaharu

( Disyorkan)                                                                        

Atas ialah kandungan terperinci Bercakap tentang cara Laravel menyepadukan GitHub untuk menyimpan fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan