is omitted you will receive 422 status code
|
##email (string) Required - Email of the submission's author or submitter. If email | is omitted, you will receive
422 status code
|
date (string)
|
Authentication
The official provides three methods:
Recommended Method 2.
Setting token
Settings > Developer settings > Personal access tokens > Generate new token
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"
Then create a configuration file under config
, I created a github-file.php
configuration file
<?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', ''),];
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 = '')
{
$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();
}
}}
Use it where neededUploadToGithub
use UploadToGithub;public function updload(Request $request){
$url = $this->uploadToGithub($request->file('file-field-name'));
return response()->json([
'code' => 200,
'message' => '上传成功',
'data' => [
'url' => $url
]
]);}
The latest five Laravel Video tutorial(recommended)