diff --git a/app/admin/controller/Upload.php b/app/admin/controller/Upload.php
index f9f0a87..c5cc270 100755
--- a/app/admin/controller/Upload.php
+++ b/app/admin/controller/Upload.php
@@ -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上传
diff --git a/app/admin/view/Config/uploads.html b/app/admin/view/Config/uploads.html
index 84528f2..f4ffe4d 100755
--- a/app/admin/view/Config/uploads.html
+++ b/app/admin/view/Config/uploads.html
@@ -19,6 +19,7 @@
+
@@ -27,6 +28,12 @@
+
@@ -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');
diff --git a/app/common.php b/app/common.php
index 00613b7..49aab54 100755
--- a/app/common.php
+++ b/app/common.php
@@ -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, '
', htmlspecialchars_decode($content));
return $content;
diff --git a/composer.json b/composer.json
index bfa67ed..cb1da9f 100755
--- a/composer.json
+++ b/composer.json
@@ -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",
diff --git a/composer.lock b/composer.lock
index 06ac98d..ecf5db0 100755
--- a/composer.lock
+++ b/composer.lock
@@ -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"
}
diff --git a/config/menu.php b/config/menu.php
index d286cc7..a0daa2d 100755
--- a/config/menu.php
+++ b/config/menu.php
@@ -203,6 +203,10 @@ return [
'url' => '/admin/weixinpay',
'name' => '微信支付',
],
+ [
+ 'url' => '/admin/uploadsFile',
+ 'name' => '图片设置',
+ ],
[
'url' => '/admin/wechatofficialaccount',
'name' => '微信公众号',