讲讲Laravel如何集成GitHub来存储文件
下面由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 |
- The commit message |
||||||||||||||||||||||||||||||||||||||||||||
content |
string | body |
committer 必填 - 新文件内容,使用
编码 |
||||||||||||||||||||||||||||||||||||||||||||
sha |
string | body |
author 如果要更新文件,则必填 - 被替换文件的 blob SHA |
||||||||||||||||||||||||||||||||||||||||||||
branch |
string | body | 分支名称 - 版本库的默认分支通常是 master
|
||||||||||||||||||||||||||||||||||||||||||||
|
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
生成的 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 仓库 */ 'repository' => 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 = '') { $path = config('github-file.path') . '/' . $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
use UploadToGithub;public function updload(Request $request){ $url = $this->uploadToGithub($request->file('file-field-name')); return response()->json([ 'code' => 200, 'message' => '上传成功', 'data' => [ 'url' => $url ] ]);}
最新的五个Laravel视频教程(推荐)
以上是讲讲Laravel如何集成GitHub来存储文件的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

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

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

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