Ar 다음 aLaravel
튜토리얼 칼럼에서는 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 |
必填 - 新文件内容,使用 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
对象的属性
名称 |
描述 |
name (string) |
必填 - 提交的作者或提交者的名字。如果省略 name 会收到 422 状态代码 |
email (string) |
必填 - 提交的作者或提交者的电子邮件。如果省略 email 会收到 422 状态代码 |
date | Parameters
string🎜🎜header🎜🎜로 설정하는 것이 좋습니다 >application/vnd .github.v3+json 🎜🎜 |
🎜owner
🎜🎜string🎜🎜path🎜🎜username🎜🎜
🎜repo
🎜🎜 string🎜🎜path🎜🎜창고 이름🎜🎜
🎜경로
🎜🎜string🎜🎜path🎜🎜파일 저장 경로🎜🎜
🎜메시지
🎜🎜string 🎜🎜body🎜🎜🎜Required🎜 - 커밋 메시지🎜🎜
🎜content
🎜🎜string🎜🎜body🎜🎜🎜Required🎜 - 🎜Base64를 사용하여 인코딩된 새 파일 콘텐츠 🎜🎜 🎜
🎜sha
🎜🎜string🎜🎜body🎜🎜🎜파일을 업데이트하려는 경우 필수🎜 - 대체된 파일의 blob SHA🎜🎜
🎜branch code>🎜🎜string🎜🎜body🎜🎜분기 이름 - 저장소의 기본 분기는 일반적으로 <code>master
🎜🎜
🎜committer
🎜🎜object🎜🎜입니다. body🎜🎜 제출자 - 기본값은 인증된 사용자입니다. 🎜🎜
🎜author
🎜🎜object🎜🎜body🎜🎜파일 작성자 - 기본값은 committer
입니다. , committer
인 경우 object🎜
의 인증된 사용자🎜🎜🎜🎜🎜committer
속성입니다. 이름 |
설명 | 🎜
🎜이름
(문자열)🎜🎜🎜필수🎜 - 작성자의 이름 또는 제출물 제출자. 이름
이 생략되면 422
상태 코드 🎜🎜
🎜이메일
(문자열)🎜🎜🎜required🎜을 받게 됩니다. 제출 작성자 또는 제출자의 이메일. email
을 생략하면 422
상태 코드 🎜🎜
🎜date
(문자열)🎜🎜🎜🎜🎜🎜🎜을 받게 됩니다. 🎜author
개체의 속성🎜
이름 |
설명 | 🎜
🎜name
(string)🎜🎜🎜필수🎜 - 제출물의 작성자 또는 제출자의 이름입니다. 이름
이 생략되면 422
상태 코드 🎜🎜
🎜이메일
(문자열)🎜🎜🎜required🎜을 받게 됩니다. 제출 작성자 또는 제출자의 이메일. email
을 생략하면 422
상태 코드 🎜🎜
🎜date
(문자열)🎜🎜🎜🎜🎜🎜🎜을 받게 됩니다.인증
공식적으로 세 가지 방법을 제공합니다:
두 번째 방법을 사용하는 것이 좋습니다.
토큰 설정
설정 > 개발자 설정 > 개인 액세스 토큰 > 새 토큰 생성
생성된 토큰은 저장되고 한 번만 표시되어야 합니다.
웨어 하우스 만들기
jsDelivr CDN을 사용하여 가속화할 수 있도록 웨어하우스를 공개로 설정하세요.
GitHub 창고를 이미지베드로 사용하는데 문제는 중국에서 GitHub 접속이 매우 느리다는 것입니다. jsDelivr CDN을 사용하면 접속 속도를 높일 수 있습니다. jsDelivr은 무료 오픈소스 CDN 솔루션으로, 중국 본토와 해외를 연결하는 최초의 무료 CDN 서비스입니다. 중국 정부가 발급한 ICP 라이센스가 있으므로 만리방화벽(Great Firewall) 사용에 대해 걱정할 필요가 없습니다. 중국의. jsDelivr을 사용하여 액세스 속도를 높이려면 사용자 정의 도메인 이름을 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 仓库
*/
'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
Laravel code에는 여러 구성 매개변수를 설정해야 하며, .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
]
]);}
로그인 후 복사
그런 다음 config
아래에 구성 파일을 생성하고 github-file.php
구성 파일을 생성했습니다. rrreeeTrait
생성 재사용 업로드 기능rrreee필요한 경우 UploadToGithub
사용rrreee
🎜🎜🎜최신 5개 Laravel 비디오 튜토리얼🎜🎜🎜(권장) 🎜🎜🎜🎜🎜
위 내용은 Laravel이 GitHub를 통합하여 파일을 저장하는 방법에 대해 이야기해 보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!