Home PHP Framework Laravel Talk about how Laravel integrates GitHub to store files

Talk about how Laravel integrates GitHub to store files

Jan 07, 2022 pm 02:52 PM
github laravel

The following tutorial column will introduce to you how Laravel integrates GitHub to store files. I hope it will be helpful to you!

GitHub API introduction

Interface documentation: docs.github.com/en/restWhat you need to use is A very powerful GitHub API, where you only need to create or update the file content interface.

Create or update file content

Request address: api.github.com/repos/{owner}/ {repo}/contents/{path}

  • Request method:

    PUT
  • ##Parameters

##Name

TypePositionacceptstringapplication/vnd.github. v3 jsonstringpathstringpath ##pathpathmessagebodycontentbodyBase64bodybranchbodycommitterbodyauthorbodycommitter
Description
headerIt is recommended to set it to ##owner
username repo
Warehouse name string
File storage path string
Required - The commit message string
Required - New file content, encoded using shastring
Required if the file is to be updated - blob of the file being replaced SHA string
Branch name - The default branch of the repository is usually master object
Committer - Default Author of the file for the authenticated user object
- Defaults to committer, if is omitted, it is the authenticated user committer Attributes of the object
Name

Description

(string)Required - The name of the author or submitter of the submission. If name is omitted you will receive email is omitted, you will receive 422Name
##name
422 status code ##email (string)Required - Email of the submission's author or submitter. If
status code date (string)
author Properties of the object
Description

nameRequired - The author or submitter of the submission name. If name is omitted you will receive 422 is omitted, you will receive 422 status code

Authentication

The official provides three methods:

  • Basic authentication - username and password

  • OAuth2 Token - token

  • OAuth2 key/secret - client_id and client_secret (only supports query)

Recommended Method 2.

Setting token

Settings > Developer settings > Personal access tokens > Generate new token

Talk about how Laravel integrates GitHub to store files

The generated token should be saved and only displayed once.

Create a warehouse

Be sure to set the warehouse to be public so that it can be accelerated using jsDelivr CDN.

The problem with using GitHub warehouse as a picture bed is that access to GitHub in China is very slow. You can use jsDelivr CDN to speed up access. jsDelivr is a free and open source CDN solution. The platform is the first free CDN service to connect mainland China and overseas. It has an ICP license issued by the Chinese government, so there is no need to worry about the use of the Great Firewall of China. To use jsDelivr to accelerate access, you need to set the custom domain name to https://cdn.jsdelivr.net/gh/username/image bed warehouse name.

Laravel code

needs to set several configuration parameters, it is recommended to put them in the .env file.

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"
Copy after login

Then create a configuration file under config, I created a github-file.php configuration file

<?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;),];
Copy after login

Create a Trait Reuse the upload function

<?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();
        }
    }}
Copy after login

Use it where neededUploadToGithub

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
        ]
    ]);}
Copy after login

The latest five Laravel Video tutorial(recommended)                                    

(string)
status code ##email (string)Required - Email of the submission's author or submitter. If email
date (string)

The above is the detailed content of Talk about how Laravel integrates GitHub to store files. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to get the return code when email sending fails in Laravel? How to get the return code when email sending fails in Laravel? Apr 01, 2025 pm 02:45 PM

Method for obtaining the return code when Laravel email sending fails. When using Laravel to develop applications, you often encounter situations where you need to send verification codes. And in reality...

Laravel schedule task is not executed: What should I do if the task is not running after schedule: run command? Laravel schedule task is not executed: What should I do if the task is not running after schedule: run command? Mar 31, 2025 pm 11:24 PM

Laravel schedule task run unresponsive troubleshooting When using Laravel's schedule task scheduling, many developers will encounter this problem: schedule:run...

In Laravel, how to deal with the situation where verification codes are failed to be sent by email? In Laravel, how to deal with the situation where verification codes are failed to be sent by email? Mar 31, 2025 pm 11:48 PM

The method of handling Laravel's email failure to send verification code is to use Laravel...

How to implement the custom table function of clicking to add data in dcat admin? How to implement the custom table function of clicking to add data in dcat admin? Apr 01, 2025 am 07:09 AM

How to implement the table function of custom click to add data in dcatadmin (laravel-admin) When using dcat...

Laravel Redis connection sharing: Why does the select method affect other connections? Laravel Redis connection sharing: Why does the select method affect other connections? Apr 01, 2025 am 07:45 AM

The impact of sharing of Redis connections in Laravel framework and select methods When using Laravel framework and Redis, developers may encounter a problem: through configuration...

Laravel multi-tenant extension stancl/tenancy: How to customize the host address of a tenant database connection? Laravel multi-tenant extension stancl/tenancy: How to customize the host address of a tenant database connection? Apr 01, 2025 am 09:09 AM

Custom tenant database connection in Laravel multi-tenant extension package stancl/tenancy When building multi-tenant applications using Laravel multi-tenant extension package stancl/tenancy,...

How to effectively check the validity of Redis connections in Laravel6 project? How to effectively check the validity of Redis connections in Laravel6 project? Apr 01, 2025 pm 02:00 PM

How to check the validity of Redis connections in Laravel6 projects is a common problem, especially when projects rely on Redis for business processing. The following is...

Laravel Eloquent ORM in Bangla partial model search) Laravel Eloquent ORM in Bangla partial model search) Apr 08, 2025 pm 02:06 PM

LaravelEloquent Model Retrieval: Easily obtaining database data EloquentORM provides a concise and easy-to-understand way to operate the database. This article will introduce various Eloquent model search techniques in detail to help you obtain data from the database efficiently. 1. Get all records. Use the all() method to get all records in the database table: useApp\Models\Post;$posts=Post::all(); This will return a collection. You can access data using foreach loop or other collection methods: foreach($postsas$post){echo$post->

See all articles