添加腾讯云

This commit is contained in:
manghe 2025-03-14 01:43:57 +00:00
parent e3f1bd64ea
commit 1b34f10387
6 changed files with 953 additions and 84 deletions

View File

@ -2,7 +2,7 @@
namespace app\admin\controller;
require_once '../extend/oss/autoload.php';
// require_once '../extend/oss/autoload.php';
use app\admin\controller\Base;
use OSS\Core\OssException;
@ -10,12 +10,27 @@ use OSS\OssClient;
use think\facade\Db;
use think\facade\Filesystem;
use think\facade\Request;
use Qcloud\Cos\Client;
class Upload extends Base
{
private $secretId; // 腾讯云 API 密钥 SecretId
private $secretKey; // 腾讯云 API 密钥 SecretKey
private $bucket; // 存储桶名称
private $region; // 存储桶所在地域
private $domain; // 存储桶所在地域
public function initialize()
{
$config = getConfig('uploads');
$this->secretId = $config['AccessKeyId'];
$this->secretKey = $config['AccessKeySecret'];
$this->bucket = $config['Bucket'];
$this->region = $config['Region'];
$this->domain = $config['Domain'];
}
/**
* 阿里云oss上传
* 上传文件到腾讯云 COS
*/
public function picture()
{
@ -24,7 +39,85 @@ class Upload extends Base
if (empty($files)) {
return $this->renderError("请上传图片");
}
// 文件格式校验
$ext = ['jpg', 'png', 'jpeg', 'JPG', 'PNG', 'JPEG', 'gif', 'apk', 'mp3'];
$type = substr($_FILES['file']['name'], strrpos($_FILES['file']['name'], '.') + 1);
if (!in_array($type, $ext)) {
return $this->renderError("文件格式错误");
}
// 文件大小校验
if ($_FILES['file']['size'] > 20971520) {
return $this->renderError("上传文件不能超过20M");
}
// 判断是否上传过
$hash = $files->hash('sha1');
$info = Db::name('picture')->where('token', $hash)->find();
if (false) {
$data['path'] = imageUrl($info['imgurl']);
$data['imgurl'] = $info['imgurl'];
return $this->renderSuccess('上传成功', $data);
} else {
// 初始化腾讯云 COS 客户端
$cosClient = new Client([
'region' => $this->region,
'schema' => 'https', // 协议
'credentials' => [
'secretId' => $this->secretId,
'secretKey' => $this->secretKey,
],
]);
// 生成唯一文件名
$date = date('Ymd');
$uniqueFileName = md5(uniqid(rand(), true)) . '.' . $type;
$cosKey = 'topic/' . $date . '/' . $uniqueFileName; // COS 中的文件路径
try {
// 上传文件到腾讯云 COS
$result = $cosClient->putObject([
'Bucket' => $this->bucket,
'Key' => $cosKey,
'Body' => fopen($_FILES['file']['tmp_name'], 'rb'), // 文件内容
]);
// 获取文件访问 URL
$cosUrl = $result['Location'];
$imgurl = $this->domain . $cosKey;
// 新增数据到数据库
$save_data['token'] = $hash;
$save_data['imgurl'] = $imgurl; // 保存 COS 中的文件路径
$save_data['addtime'] = time();
$save_data['type'] = 1;
$res = Db::name('picture')->insertGetId($save_data);
if ($res) {
$data['id'] = $res;
$data['path'] = $imgurl; // 返回文件的完整访问 URL
$data['imgurl'] = $imgurl ;
return $this->renderSuccess('上传成功', $data);
} else {
return $this->renderError('上传失败');
}
} catch (\Exception $e) {
return $this->renderError('文件上传失败:' . $e->getMessage());
}
}
}
/**
* 上传文件
*/
public function picture_file()
{
// 获取表单上传文件
$files = request()->file('file', '');
if (empty($files)) {
return $this->renderError("请上传图片");
}
$ext = ['jpg', 'png', 'jpeg', 'JPG', 'PNG', 'JPEG', 'gif', 'apk', 'mp3'];
$type = substr($_FILES['file']['name'], strrpos($_FILES['file']['name'], '.') + 1);
if (!in_array($type, $ext)) {
@ -33,13 +126,13 @@ class Upload extends Base
if ($_FILES['file']['size'] > 20971520) {
return $this->renderError("上传文件不能超过20M");
}
// 判断是否上传过
$hash = $files->hash('sha1');
$info = Db::name('picture')->where('token', $hash)->find();
// if ($info) {
if (false) {
if ($info) {
// if (false) {
$data['path'] = imageUrl($info['imgurl']);
$data['imgurl'] = $info['imgurl'];
return $this->renderSuccess('上传成功', $data);
@ -52,12 +145,11 @@ class Upload extends Base
mkdir($saveDir, 0777, true);
}
$savename = $saveDir . '/' . $uniqueFileName;
// 移动文件到目标目录
if (move_uploaded_file($_FILES['file']['tmp_name'], $savename)) {
$savename = str_replace('\\', '/', $savename);
$savename = substr($savename, 1); // 去掉开头的 “.”
// 新增数据
$save_data['token'] = $hash;
$save_data['imgurl'] = $savename;
@ -76,7 +168,7 @@ class Upload extends Base
}
}
}
/**
* 阿里云oss上传

View File

@ -19,6 +19,7 @@
<div class="layui-input-block">
<input type="radio" name="type" value="1" {if condition="$data['type'] eq 1"} checked{/if} lay-verify="required" title="本地存储" class="layui-input" lay-filter="ChoiceRadio">
<input type="radio" name="type" value="2" {if condition="$data['type'] eq 2"} checked{/if} lay-verify="required" title="阿里云存储" class="layui-input" lay-filter="ChoiceRadio">
<input type="radio" name="type" value="3" {if condition="$data['type'] eq 3"} checked{/if} lay-verify="required" title="腾讯云存储" class="layui-input" lay-filter="ChoiceRadio">
</div>
</div>
<div class="layui-form-item xuan" {if condition="$data['type'] eq 1"} style="display:none;" {/if}>
@ -27,6 +28,12 @@
<input type="text" name="Bucket" value="{$data['Bucket']}" lay-verify="required" title="空间名称Bucket" class="layui-input">
</div>
</div>
<div class="layui-form-item xuan" {if condition="$data['type'] eq 1"} style="display:none;" {/if}>
<label class="layui-form-label">地域 region</label>
<div class="layui-input-block">
<input type="text" name="Region" value="{$data['Region']}" lay-verify="required" title="空间域名 Domain" class="layui-input">
</div>
</div>
<div class="layui-form-item xuan" {if condition="$data['type'] eq 1"} style="display:none;" {/if}>
<label class="layui-form-label">AccessKeyId</label>
<div class="layui-input-block">
@ -40,9 +47,9 @@
</div>
</div>
<div class="layui-form-item xuan" {if condition="$data['type'] eq 1"} style="display:none;" {/if}>
<label class="layui-form-label">空间域名 Domain</label>
<label class="layui-form-label">请求域名 Domain</label>
<div class="layui-input-block">
<input type="text" name="url" value="{$data['url']}" lay-verify="required" title="空间域名 Domain" class="layui-input">
<input type="text" name="Domain" value="{$data['Domain']}" lay-verify="required" title="空间域名 Domain" class="layui-input">
</div>
</div>
<input type="hidden" name="key" value="{$key}">
@ -67,7 +74,7 @@
var form = layui.form;
//获取单选框选中的值
form.on('radio(ChoiceRadio)', function(data){
if(data.value==2){
if(data.value==2||data.value==3){
$('.xuan').css("display",'block');
}else{
$('.xuan').css("display",'none');

View File

@ -86,18 +86,22 @@ if (!function_exists('imageUrl')) {
if ($url == '') {
return '';
}
$pre = request()->domain();
if (strpos($url, 'http') !== false) {
$path = $url;
}
// else if (strpos($pre, '192.168') !== false) {#测试环境
// $path = $pre . "ceshi/public/" . $url;
// }
else if ($url === '0') {
$path = $pre;
} else {
$path = $pre . $url;
else{
$pre = request()->domain();
if ($url === '0') {
$path = $pre;
} else {
$path = $pre . $url;
}
}
$path = str_replace('\\', '/', $path);
return $path;
@ -113,9 +117,9 @@ if (!function_exists('contentUrl')) {
function contentUrl($content)
{
$url = request()->domain() . '/';
if (strpos($url, '192.168') !== false) {#测试环境
$url = $url . "ceshi/public/";
}
// if (strpos($url, '192.168') !== false) {#测试环境
// $url = $url . "ceshi/public/";
// }
$pregRule = "/<[img|IMG].*?src=[\|\"](.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\|\"].*?[\/]?>/";
$content = preg_replace($pregRule, '<img src="' . $url . '${1}" style="max-width:100%">', htmlspecialchars_decode($content));
return $content;

View File

@ -27,7 +27,8 @@
"topthink/think-view": "^1.0",
"topthink/think-captcha": "^3.0",
"endroid/qr-code": "^4.6",
"phpoffice/phpspreadsheet": "^1.29"
"phpoffice/phpspreadsheet": "^1.29",
"qcloud/cos-sdk-v5": "^2.6"
},
"require-dev": {
"symfony/var-dumper": "^4.2",

883
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "0b24efd4dd99cbb4227aa47b22059ba9",
"content-hash": "810d3950b90680e91d2b03690286abf6",
"packages": [
{
"name": "bacon/bacon-qr-code",
@ -352,6 +352,587 @@
},
"time": "2024-11-01T03:51:45+00:00"
},
{
"name": "guzzlehttp/command",
"version": "1.3.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/command.git",
"reference": "888e74fc1d82a499c1fd6726248ed0bc0886395e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/command/zipball/888e74fc1d82a499c1fd6726248ed0bc0886395e",
"reference": "888e74fc1d82a499c1fd6726248ed0bc0886395e",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "^7.9.2",
"guzzlehttp/promises": "^1.5.3 || ^2.0.3",
"guzzlehttp/psr7": "^2.7.0",
"php": "^7.2.5 || ^8.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.19 || ^9.5.8"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": false
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Command\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Jeremy Lindblom",
"email": "jeremeamia@gmail.com",
"homepage": "https://github.com/jeremeamia"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
}
],
"description": "Provides the foundation for building command-based web service clients",
"support": {
"issues": "https://github.com/guzzle/command/issues",
"source": "https://github.com/guzzle/command/tree/1.3.2"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/command",
"type": "tidelift"
}
],
"time": "2025-02-04T09:56:46+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "7.9.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "d281ed313b989f213357e3be1a179f02196ac99b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
"reference": "d281ed313b989f213357e3be1a179f02196ac99b",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.5.3 || ^2.0.3",
"guzzlehttp/psr7": "^2.7.0",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
},
"provide": {
"psr/http-client-implementation": "1.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*",
"guzzle/client-integration-tests": "3.0.2",
"php-http/message-factory": "^1.1",
"phpunit/phpunit": "^8.5.39 || ^9.6.20",
"psr/log": "^1.1 || ^2.0 || ^3.0"
},
"suggest": {
"ext-curl": "Required for CURL handler support",
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": false
}
},
"autoload": {
"files": [
"src/functions_include.php"
],
"psr-4": {
"GuzzleHttp\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Jeremy Lindblom",
"email": "jeremeamia@gmail.com",
"homepage": "https://github.com/jeremeamia"
},
{
"name": "George Mponos",
"email": "gmponos@gmail.com",
"homepage": "https://github.com/gmponos"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://github.com/sagikazarmark"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle is a PHP HTTP client library",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
"psr-18",
"psr-7",
"rest",
"web service"
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.9.2"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
"type": "tidelift"
}
],
"time": "2024-07-24T11:22:20+00:00"
},
{
"name": "guzzlehttp/guzzle-services",
"version": "1.4.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle-services.git",
"reference": "45bfeb80d5ed072bb39e9f6ed1ec5d650edae961"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle-services/zipball/45bfeb80d5ed072bb39e9f6ed1ec5d650edae961",
"reference": "45bfeb80d5ed072bb39e9f6ed1ec5d650edae961",
"shasum": ""
},
"require": {
"guzzlehttp/command": "^1.3.2",
"guzzlehttp/guzzle": "^7.9.2",
"guzzlehttp/psr7": "^2.7.0",
"guzzlehttp/uri-template": "^1.0.4",
"php": "^7.2.5 || ^8.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.19 || ^9.5.8"
},
"suggest": {
"gimler/guzzle-description-loader": "^0.0.4"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": false
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Command\\Guzzle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Stefano Kowalke",
"email": "blueduck@mail.org",
"homepage": "https://github.com/Konafets"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
}
],
"description": "Provides an implementation of the Guzzle Command library that uses Guzzle service descriptions to describe web services, serialize requests, and parse responses into easy to use model structures.",
"support": {
"issues": "https://github.com/guzzle/guzzle-services/issues",
"source": "https://github.com/guzzle/guzzle-services/tree/1.4.2"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle-services",
"type": "tidelift"
}
],
"time": "2025-02-04T09:59:21+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
"reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.39 || ^9.6.20"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": false
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/2.0.4"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
"type": "tidelift"
}
],
"time": "2024-10-17T10:06:22+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "2.7.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.1 || ^2.0",
"ralouphie/getallheaders": "^3.0"
},
"provide": {
"psr/http-factory-implementation": "1.0",
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0",
"phpunit/phpunit": "^8.5.39 || ^9.6.20"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": false
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "George Mponos",
"email": "gmponos@gmail.com",
"homepage": "https://github.com/gmponos"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://github.com/sagikazarmark"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://sagikazarmark.hu"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [
"http",
"message",
"psr-7",
"request",
"response",
"stream",
"uri",
"url"
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.7.0"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
"type": "tidelift"
}
],
"time": "2024-07-18T11:15:46+00:00"
},
{
"name": "guzzlehttp/uri-template",
"version": "v1.0.4",
"source": {
"type": "git",
"url": "https://github.com/guzzle/uri-template.git",
"reference": "30e286560c137526eccd4ce21b2de477ab0676d2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2",
"reference": "30e286560c137526eccd4ce21b2de477ab0676d2",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"symfony/polyfill-php80": "^1.24"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.36 || ^9.6.15",
"uri-template/tests": "1.0.0"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": false
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\UriTemplate\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "George Mponos",
"email": "gmponos@gmail.com",
"homepage": "https://github.com/gmponos"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
}
],
"description": "A polyfill class for uri_template of PHP",
"keywords": [
"guzzlehttp",
"uri-template"
],
"support": {
"issues": "https://github.com/guzzle/uri-template/issues",
"source": "https://github.com/guzzle/uri-template/tree/v1.0.4"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template",
"type": "tidelift"
}
],
"time": "2025-02-03T10:55:03+00:00"
},
{
"name": "maennchen/zipstream-php",
"version": "2.2.6",
@ -1020,6 +1601,186 @@
],
"time": "2017-10-23T01:57:42+00:00"
},
{
"name": "qcloud/cos-sdk-v5",
"version": "v2.6.16",
"source": {
"type": "git",
"url": "https://github.com/tencentyun/cos-php-sdk-v5.git",
"reference": "22366f4b4f7f277e67aa72eea8d1e02a5f9943e2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tencentyun/cos-php-sdk-v5/zipball/22366f4b4f7f277e67aa72eea8d1e02a5f9943e2",
"reference": "22366f4b4f7f277e67aa72eea8d1e02a5f9943e2",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-simplexml": "*",
"guzzlehttp/guzzle": "^6.2.1 || ^7.0",
"guzzlehttp/guzzle-services": "^1.1",
"guzzlehttp/psr7": "^1.3.1 || ^2.0",
"php": ">=5.6"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.4-dev"
}
},
"autoload": {
"files": [
"src/Common.php"
],
"psr-4": {
"Qcloud\\Cos\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "yaozongyou",
"email": "yaozongyou@vip.qq.com"
},
{
"name": "lewzylu",
"email": "327874225@qq.com"
},
{
"name": "tuunalai",
"email": "550566181@qq.com"
}
],
"description": "PHP SDK for QCloud COS",
"keywords": [
"cos",
"php",
"qcloud"
],
"support": {
"issues": "https://github.com/tencentyun/cos-php-sdk-v5/issues",
"source": "https://github.com/tencentyun/cos-php-sdk-v5/tree/v2.6.16"
},
"time": "2025-01-21T12:49:21+00:00"
},
{
"name": "ralouphie/getallheaders",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/ralouphie/getallheaders.git",
"reference": "120b605dfeb996808c31b6477290a714d356e822"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5 || ^6.5"
},
"type": "library",
"autoload": {
"files": [
"src/getallheaders.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ralph Khattar",
"email": "ralph.khattar@gmail.com"
}
],
"description": "A polyfill for getallheaders.",
"support": {
"issues": "https://github.com/ralouphie/getallheaders/issues",
"source": "https://github.com/ralouphie/getallheaders/tree/develop"
},
"time": "2019-03-08T08:55:37+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v2.5.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "605389f2a7e5625f273b53960dc46aeaf9c62918"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918",
"reference": "605389f2a7e5625f273b53960dc46aeaf9c62918",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "2.5-dev"
}
},
"autoload": {
"files": [
"function.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.31.0",
@ -1077,6 +1838,63 @@
],
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.31.0",
"dist": {
"type": "zip",
"url": "https://mirrors.tencent.com/repository/composer/symfony/polyfill-php80/v1.31.0/symfony-polyfill-php80-v1.31.0.zip",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php80\\": ""
},
"classmap": [
"Resources/stubs"
]
},
"license": [
"MIT"
],
"authors": [
{
"name": "Ion Bazan",
"email": "ion.bazan@gmail.com"
},
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "topthink/framework",
"version": "v6.1.5",
@ -1400,63 +2218,6 @@
],
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.31.0",
"dist": {
"type": "zip",
"url": "https://mirrors.tencent.com/repository/composer/symfony/polyfill-php80/v1.31.0/symfony-polyfill-php80-v1.31.0.zip",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php80\\": ""
},
"classmap": [
"Resources/stubs"
]
},
"license": [
"MIT"
],
"authors": [
{
"name": "Ion Bazan",
"email": "ion.bazan@gmail.com"
},
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v4.4.47",
@ -1567,12 +2328,12 @@
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": {},
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=7.1.0"
},
"platform-dev": {},
"plugin-api-version": "2.6.0"
"platform-dev": [],
"plugin-api-version": "2.0.0"
}

View File

@ -203,6 +203,10 @@ return [
'url' => '/admin/weixinpay',
'name' => '微信支付',
],
[
'url' => '/admin/uploadsFile',
'name' => '图片设置',
],
[
'url' => '/admin/wechatofficialaccount',
'name' => '微信公众号',