Maison  >  Article  >  cadre php  >  Parlez de la façon dont Laravel intègre GitHub pour stocker des fichiers

Parlez de la façon dont Laravel intègre GitHub pour stocker des fichiers

藏色散人
藏色散人avant
2022-01-07 14:52:012298parcourir

suivante vous présentera comment Laravel intègre github pour stocker des fichiers. J'espère qu'elle sera utile à tout le monde !

Introduction à l'API GitHub

Documentation de l'interface : docs.github.com/en/restVous devez utiliser la très puissante API GitHub, où il vous suffit de créer ou de mettre à jour l'interface de contenu des fichiers.

Créer ou mettre à jour le contenu du fichier

Adresse de demande : api.github.com/repos/{owner}/{repo}/contents/{path}

  • Méthode de demande : PUT

  • 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 对象的属性

    Paramètres🎜propriétaire🎜🎜string🎜🎜path🎜🎜username🎜🎜🎜repo🎜🎜 chaîne🎜🎜chemin🎜🎜nom de l'entrepôt🎜🎜🎜chemin🎜🎜chaîne🎜🎜chemin🎜🎜chemin de stockage des fichiers🎜🎜🎜message 🎜🎜string 🎜🎜body🎜🎜🎜Required🎜 - Le message de commit🎜🎜🎜content🎜🎜string🎜🎜body🎜🎜🎜Required🎜 - Le nouveau contenu du fichier, encodé en utilisant 🎜Base64 🎜🎜 🎜🎜sha🎜🎜string🎜🎜body🎜🎜🎜Obligatoire si vous souhaitez mettre à jour le fichier🎜 - blob SHA du fichier remplacé🎜🎜🎜branche code>🎜🎜string🎜🎜body🎜🎜Nom de la branche - La branche par défaut du référentiel est généralement <code>master🎜🎜🎜committer🎜🎜object🎜🎜 body🎜🎜 Auteur - La valeur par défaut est l'utilisateur authentifié 🎜🎜🎜author🎜🎜object🎜🎜body🎜🎜L'auteur du fichier - La valeur par défaut est committer , si committer, c'est l'attribut user authentifié🎜🎜🎜🎜🎜committer de l'objet🎜
    名称 描述
    name (string) 必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码
    email (string) 必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码
    date
    accepter
    Nom Type Emplacement Description
    string🎜🎜header🎜🎜Il est recommandé de le définir sur application/vnd .github.v3+json🎜🎜
    🎜🎜name (string)🎜🎜🎜Obligatoire🎜 - Le nom de l'auteur ou l'auteur de la soumission. Si name est omis, vous recevrez le code de statut 422 🎜🎜🎜email (string)🎜🎜🎜required🎜 - le l'auteur de la soumission ou l'e-mail de l'auteur de la soumission. Si email est omis, vous recevrez le code de statut 422 🎜🎜🎜date (string)🎜🎜🎜🎜🎜🎜🎜 🎜auteur Attributs de l'objet🎜
    Nom Description
    🎜🎜name (string)🎜🎜🎜Obligatoire🎜 - Le nom de l'auteur ou de l'auteur de la soumission. Si name est omis, vous recevrez le code de statut 422 🎜🎜🎜email (string)🎜🎜🎜required🎜 - le l'auteur de la soumission ou l'e-mail de l'auteur de la soumission. Si email est omis, vous recevrez le code de statut 422 🎜🎜🎜date (string)🎜🎜🎜🎜🎜🎜🎜

    Authentification

    Fournit officiellement trois méthodes :

    • Authentification de base - nom d'utilisateur et mot de passe

    • OAuth2 Token - token

    • OAuth2 clé/secret - client_id et client_secret (prend uniquement en charge les requêtes)

    Il est recommandé d'utiliser la deuxième méthode.

    Définir le jeton

    Paramètres > Paramètres du développeur > Jetons d'accès personnels > Générer un nouveau jeton

    Parlez de la façon dont Laravel intègre GitHub pour stocker des fichiers

    Le jeton généré ne doit être enregistré et affiché qu'une seule fois.

    Créer un entrepôt

    Assurez-vous de définir l'entrepôt comme public afin qu'il puisse être accéléré à l'aide du CDN jsDelivr.

    En utilisant l'entrepôt GitHub comme lit d'images, le problème est que l'accès à GitHub en Chine est très lent. Vous pouvez utiliser jsDelivr CDN pour accélérer l'accès. jsDelivr est une solution CDN gratuite et open source. La plateforme est le premier service CDN gratuit à connecter la Chine continentale et l'étranger. Elle dispose d'une licence ICP délivrée par le gouvernement chinois, vous n'avez donc pas à vous soucier de l'utilisation du Grand Pare-feu. de Chine. Pour utiliser jsDelivr pour accélérer l'accès, vous devez définir le nom de domaine personnalisé sur https://cdn.jsdelivr.net/gh/username/image bed Warehouse Name. https://cdn.jsdelivr.net/gh/用户名/图床仓库名

    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('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', ''),];

    创建一个 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('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();
            }
        }}

    在需要的地方使用 UploadToGithub

    Le code Laravel doit définir plusieurs paramètres de configuration, il est recommandé de les mettre dans le fichier .env.

    use UploadToGithub;public function updload(Request $request){
        $url = $this->uploadToGithub($request->file('file-field-name'));
        
        return response()->json([
            'code' => 200,
            'message' => '上传成功',
            'data' => [
                'url' => $url
            ]
        ]);}
    Ensuite créez un fichier de configuration sous config, j'ai créé un fichier de configuration github-file.php

    rrreee
    Créez un Trait Réutilisez le fonction de téléchargement

    rrreeeUtilisez UploadToGithub si nécessairerrreee

    🎜🎜🎜Les cinq derniers didacticiels vidéo Laravel🎜🎜🎜 (recommandé) 🎜🎜🎜🎜🎜
    Nom Description

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer