首页 php框架 Laravel 讲讲Laravel如何集成GitHub来存储文件

讲讲Laravel如何集成GitHub来存储文件

Jan 07, 2022 pm 02:52 PM
github laravel

下面由Laravel教程栏目给大家介绍Laravel 怎么集成 GitHub 来存储文件,希望对大家有所帮助!

GitHub API 介绍

接口文档:docs.github.com/en/rest

需要用到的是功能十分强大的 GitHub API,这里只需要 创建或更新文件内容 接口。

创建或更新文件内容

  • 请求地址: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
名称 类型 位置 描述
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,则为认证的用户
必填

- The commit message

content string body committer必填 - 新文件内容,使用
名称 描述
name (string) 必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码
email (string) 必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码
date (string)
Base64

编码

sha string body author如果要更新文件,则必填 - 被替换文件的 blob SHA
branch string body 分支名称 - 版本库的默认分支通常是 master
名称 描述
name (string) 必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码
email (string) 必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码
date (string)
object body 提交人 - 默认为已认证的用户
object body 文件的作者 - 默认为 ,如省略 ,则为认证的用户
对象的属性
名称 描述
name (string) 必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码
email (string) 必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码
date (string)
对象的属性
名称 描述
name (string) 必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码
email (string) 必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码
date (string)

鉴权

官方提供了三种方式:

  • Basic authentication - 用户名和密码

  • OAuth2 Token - token

  • OAuth2 key/secret - client_id 和 client_secret (只支持查询)

推荐使用第 2 种方式。

设置 token

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

讲讲Laravel如何集成GitHub来存储文件

生成的 token 要保存好,只显示一次。

创建仓库

一定要把仓库设置为公开的,目的是能够使用 jsDelivr CDN 加速。

使用 GitHub 仓库作为图床,存在的问题是国内访问 GitHub 的速度很慢,可以利用 jsDelivr CDN 来加速访问。jsDelivr 是一个免费开源的 CDN 解决方案,该平台是首个打通中国大陆与海外的免费 CDN 服务,拥有中国政府颁发的 ICP 许可证,无须担心中国防火墙问题而影响使用。使用 jsDelivr 加速访问,需要将自定义域名设置为 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(&#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;),];
登录后复制

创建一个 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
        ]
    ]);}
登录后复制

最新的五个Laravel视频教程(推荐)                                 

以上是讲讲Laravel如何集成GitHub来存储文件的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在Laravel中如何获取邮件发送失败时的退信代码? 在Laravel中如何获取邮件发送失败时的退信代码? Apr 01, 2025 pm 02:45 PM

Laravel邮件发送失败时的退信代码获取方法在使用Laravel开发应用时,经常会遇到需要发送验证码的情况。而在实�...

Bangla 部分模型检索中的 Laravel Eloquent ORM) Bangla 部分模型检索中的 Laravel Eloquent ORM) Apr 08, 2025 pm 02:06 PM

LaravelEloquent模型检索:轻松获取数据库数据EloquentORM提供了简洁易懂的方式来操作数据库。本文将详细介绍各种Eloquent模型检索技巧,助您高效地从数据库中获取数据。1.获取所有记录使用all()方法可以获取数据库表中的所有记录:useApp\Models\Post;$posts=Post::all();这将返回一个集合(Collection)。您可以使用foreach循环或其他集合方法访问数据:foreach($postsas$post){echo$post->

git vs. github:版本控制和代码托管 git vs. github:版本控制和代码托管 Apr 11, 2025 am 11:33 AM

Git是版本控制系统,GitHub是基于Git的代码托管平台。Git用于管理代码版本,支持本地操作;GitHub提供在线协作工具,如Issue跟踪和PullRequest。

Laravel的地理空间:互动图和大量数据的优化 Laravel的地理空间:互动图和大量数据的优化 Apr 08, 2025 pm 12:24 PM

利用地理空间技术高效处理700万条记录并创建交互式地图本文探讨如何使用Laravel和MySQL高效处理超过700万条记录,并将其转换为可交互的地图可视化。初始挑战项目需求:利用MySQL数据库中700万条记录,提取有价值的见解。许多人首先考虑编程语言,却忽略了数据库本身:它能否满足需求?是否需要数据迁移或结构调整?MySQL能否承受如此大的数据负载?初步分析:需要确定关键过滤器和属性。经过分析,发现仅少数属性与解决方案相关。我们验证了过滤器的可行性,并设置了一些限制来优化搜索。地图搜索基于城

在Laravel6项目中如何有效检查Redis连接的有效性? 在Laravel6项目中如何有效检查Redis连接的有效性? Apr 01, 2025 pm 02:00 PM

在Laravel6项目中如何检查Redis连接的有效性是一个常见的问题,特别是在项目依赖于Redis进行业务处理时。以下是...

Laravel和后端:为Web应用程序提供动力逻辑 Laravel和后端:为Web应用程序提供动力逻辑 Apr 11, 2025 am 11:29 AM

Laravel是如何在后端逻辑中发挥作用的?它通过路由系统、EloquentORM、认证与授权、事件与监听器以及性能优化来简化和增强后端开发。1.路由系统允许定义URL结构和请求处理逻辑。2.EloquentORM简化数据库交互。3.认证与授权系统便于用户管理。4.事件与监听器实现松耦合代码结构。5.性能优化通过缓存和队列提高应用效率。

laravel入门实例 laravel入门实例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用于轻松构建 Web 应用程序。它提供一系列强大的功能,包括:安装: 使用 Composer 全局安装 Laravel CLI,并在项目目录中创建应用程序。路由: 在 routes/web.php 中定义 URL 和处理函数之间的关系。视图: 在 resources/views 中创建视图以呈现应用程序的界面。数据库集成: 提供与 MySQL 等数据库的开箱即用集成,并使用迁移来创建和修改表。模型和控制器: 模型表示数据库实体,控制器处理 HTTP 请求。

git和github相同吗? git和github相同吗? Apr 08, 2025 am 12:13 AM

Git和GitHub不是同一回事。Git是版本控制系统,GitHub是基于Git的代码托管平台。Git用于管理代码版本,GitHub提供在线协作环境。

See all articles