我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Laravel怎么集成GitHub来存储文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Laravel怎么集成GitHub来存储文件

这篇文章主要讲解了“Laravel怎么集成GitHub来存储文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel怎么集成GitHub来存储文件”吧!

GitHub API 介绍

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

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

创建或更新文件内容

  • 请求地址:api.github.com/repos/{owner}/{repo}/contents/{path}

  • 请求方式:PUT

参数

名称类型位置描述
acceptstringheader建议设置为 application/vnd.github.v3+json
ownerstringpath用户名
repostringpath仓库名
pathstringpath文件存储路径
messagestringbody必填 - The commit message
contentstringbody必填 - 新文件内容,使用 Base64 编码
shastringbody如果要更新文件,则必填 - 被替换文件的 blob SHA
branchstringbody分支名称 - 版本库的默认分支通常是 master
committerobjectbody提交人 - 默认为已认证的用户
authorobjectbody文件的作者 - 默认为 committer,如省略 committer,则为认证的用户

committer 对象的属性

名称描述
name (string)必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码
email (string)必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码
date (string)

author 对象的属性

名称描述
name (string)必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码
email (string)必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码
date (string)

鉴权

官方提供了三种方式:

  • Basic authentication - 用户名和密码

  • OAuth3 Token - token

  • OAuth3 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_REPOSITORYGITHUB_FILE_BRANCH=masterGITHUB_FILE_TOKEN=YOUR_TOKENGITHUB_FILE_PATH=YOUR_PATHGITHUB_FILE_NAME=1GITHUB_FILE_COMMIT_MESSAGE="YOUR COMMIT MESSAGE"

然后在 config 下创建一个配置文件,我创建了一个 github-file.php 配置文件

<?phpreturn [  'repository' => env('GITHUB_FILE_REPOSITORY', ''),  'branch' => env('GITHUB_FILE_BRANCH', 'master'),  'token' => env('GITHUB_FILE_TOKEN', ''),  'path' => env('GITHUB_FILE_PATH', ''),  'domain' => env('GITHUB_FILE_DOMAIN', 'https://cdn.jsdelivr.net/gh/'),  'name' => env('GITHUB_FILE_NAME', 1),  'commit_message' => env('GITHUB_FILE_COMMIT_MESSAGE', ''),];

创建一个 Trait 以复用上传功能

<?phpnamespace 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('未发现图片');    }        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怎么集成GitHub来存储文件”的内容了,经过本文的学习后,相信大家对Laravel怎么集成GitHub来存储文件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Laravel怎么集成GitHub来存储文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Laravel怎么集成GitHub来存储文件

这篇文章主要讲解了“Laravel怎么集成GitHub来存储文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel怎么集成GitHub来存储文件”吧!GitHub API 介绍接口
2023-06-26

Springboot怎么集成minio实现文件存储

本篇内容主要讲解“Springboot怎么集成minio实现文件存储”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Springboot怎么集成minio实现文件存储”吧!MinIO 是一款基于G
2023-06-29

Laravel中的文件存储是什么

在Laravel中,文件存储是指将文件上传到服务器或存储在本地文件系统中,并在需要时进行访问和管理。Laravel提供了便捷的文件存储功能,可以轻松地处理文件上传、存储、检索、更新和删除等操作。通过使用Laravel的文件存储功能,开发人员
Laravel中的文件存储是什么
2024-04-16

mongodb存储文件怎么存储

MongoDB可以通过两种方法存储文件:1. 将文件存储为二进制数据(BSON):可以将文件转换为二进制格式,然后将其存储在MongoDB的文档字段中。这种方法适用于小型文件,如图片或文档。2. 使用GridFS存储文件:GridFS是Mo
2023-09-01

matlab怎么存储txt文件

在MATLAB中,可以使用fprintf函数来将数据保存到txt文件中。例如,以下代码将一个矩阵保存到txt文件中:data = magic(5); % 创建一个5x5的魔方阵filename = 'data.txt
matlab怎么存储txt文件
2024-04-09

Java 文件操作与云存储集成:探索无限可能

Java 文件操作与云存储集成,让数据存储和管理更加便捷高效。本文将深入探讨如何使用 Java 代码与云存储服务进行集成,并提供具体示例和代码片段,帮助您轻松入门并快速上手。
Java 文件操作与云存储集成:探索无限可能
2024-02-26

mongodb怎么存储海量文件

在MongoDB中存储海量文件,可以使用GridFS,它是MongoDB提供的一种存储大文件的机制。GridFS将大文件分割成多个小的块(chunks),每个块的默认大小为255KB,然后将这些块存储在一个名为"chunks"的集合中。同
mongodb怎么存储海量文件
2024-02-29

怎么将MAC的文件存储至NAS网络存储

怎么将MAC的文件存储至NAS网络存储,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Mac OS电脑用户可以使用TNAS PC桌面客户端来管理TNAS的文件,操
2023-06-04

java文件流怎么保存成文件

要将Java文件流保存为文件,可以使用FileOutputStream类。以下是保存Java文件流的示例代码:javaimport java.io.*;public class SaveFileStreamToFile { publi
2023-10-21

Beam怎么与各种数据存储系统集成

Beam可以与各种数据存储系统集成,包括但不限于关系型数据库、NoSQL数据库、数据仓库和对象存储系统。以下是一些常见的数据存储系统及其与Beam集成的方法:关系型数据库:Beam可以通过JDBC连接器与关系型数据库集成,如MySQL、Po
Beam怎么与各种数据存储系统集成
2024-04-09

SpringBoot怎么整合Minio文件存储

这篇“SpringBoot怎么整合Minio文件存储”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎么整
2023-06-29

java怎么把对象存储在文件

Java中的对象序列化机制允许将对象存储到文件或数据库中,以便以后使用。序列化过程涉及将对象的内部状态转换为二进制格式,反序列化过程则将二进制格式还原为对象。对象序列化具有持久性、可移植性和高效性的优点,但存在版本不兼容、安全性和空间占用方面的缺点。
java怎么把对象存储在文件
2024-04-11

文件云存储地址怎么获取

获取文件云存储地址的方法取决于你使用的云存储服务。以下是一些常见的云存储服务和获取文件地址的方法:1. Dropbox:在Dropbox网站上,右键单击要获取链接的文件,选择“复制链接”即可获取文件链接。2. Google Drive:在G
2023-06-10

mongodb数据存储文件怎么导出

要将MongoDB中的数据存储文件导出,可以使用MongoDB的命令行工具mongoexport。以下是导出数据的步骤:1. 打开终端或命令提示符窗口,并导航到MongoDB的安装目录中的bin文件夹。2. 运行以下命令来导出数据:```m
2023-08-31

使用SpringBoot怎么对Redis进行集成来实现缓存

本篇文章给大家分享的是有关使用SpringBoot怎么对Redis进行集成来实现缓存,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Redis简介Redis 是一个开源(BSD许
2023-05-31

云服务器怎么存储数据文件

云服务器通常提供数据文件存储选项,您可以使用云服务器提供的存储功能来存储数据文件。常见的存储选项包括:Podcast(节目)Postonline(在线)Playbook(游戏书籍)Playback(下载列表)Dropbox(dropbox)如果您需要将您的数据文件保存到本地硬盘上,则可以使用以下步骤:打开您的云服务器。在存储选项卡中,选择“文件存储(Dropbox)”选项。
2023-10-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录