🎜date
(string)🎜🎜🎜🎜🎜🎜🎜Authentification
Fournit officiellement trois méthodes :
Il est recommandé d'utiliser la deuxième méthode.
Définir le jeton
Paramètres > Paramètres du développeur > Jetons d'accès personnels > Générer un nouveau jeton
Le jeton généré ne doit être enregistré et affiché qu'une seule fois.
Créer un entrepôt
Assurez-vous de définir l'entrepôt comme public afin qu'il puisse être accéléré à l'aide du CDN jsDelivr.
En utilisant l'entrepôt GitHub comme lit d'images, le problème est que l'accès à GitHub en Chine est très lent. Vous pouvez utiliser jsDelivr CDN pour accélérer l'accès. jsDelivr est une solution CDN gratuite et open source. La plateforme est le premier service CDN gratuit à connecter la Chine continentale et l'étranger. Elle dispose d'une licence ICP délivrée par le gouvernement chinois, vous n'avez donc pas à vous soucier de l'utilisation du Grand Pare-feu. de Chine. Pour utiliser jsDelivr pour accélérer l'accès, vous devez définir le nom de domaine personnalisé sur 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
Le code Laravel doit définir plusieurs paramètres de configuration, il est recommandé de les mettre dans le fichier .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
]
]);}
Ensuite créez un fichier de configuration sous config
, j'ai créé un fichier de configuration github-file.php
rrreee
Créez un Trait
Réutilisez le fonction de téléchargementrrreeeUtilisez UploadToGithub
si nécessairerrreee
🎜🎜🎜Les cinq derniers didacticiels vidéo Laravel🎜🎜🎜 (recommandé) 🎜🎜🎜🎜🎜