当前位置: 首页 > news >正文

使用七牛云、阿里云、腾讯云的对象存储上传文件

 说明:存在部分步骤省略的情况,请根据具体文档进行操作

 下载相关sdk

composer require qiniu/php-sdkcomposer require aliyuncs/oss-sdk-php
composer require alibabacloud/sts-20150401composer require qcloud/cos-sdk-v5
composer require qcloud_sts/qcloud-sts-sdk# 如果不需要,请移除,示例:
# composer remove qcloud_sts/qcloud-sts-sdk
use Qiniu\Auth;
use AlibabaCloud\SDK\Sts\V20150401\Sts;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Sts\V20150401\Models\AssumeRoleRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;require_once __DIR__ . 'vendor/autoload.php';class oss
{public function qiniuPolicy(){$domain = ''; // 访问oss文件的域名$bucket = ''; // 空间名称$accessKey = '';$secretKey = '';$endpoint = ''; // 上传文件的地址,例如:https://up-z2.qiniup.com$prefix = ''; // 指定bucket目录前缀$dir = $prefix . '/' . date('Ymd') . '/'; // 按日期上传到指定目录$expire = time() + 3600;$policyArr = ['scope' => $bucket,'deadline' => $expire,'fsizeMin' => 1,'fsizeLimit' => 10 * 1024 * 1024,];$auth = new Auth($accessKey, $secretKey);$token = $auth->uploadToken($bucket, null, 3600, $policyArr);if (empty($token)) {return [];}return ['endpoint' => $endpoint,'host' => $domain,'accessId' => '','policy' => '','signature' => '','token' => $token,'expire' => $expire,'keyTime' => '','algorithm' => '','dir' => $dir,];}public function aliPolicy(){// https://help.aliyun.com/zh/oss/use-cases/obtain-signature-information-from-the-server-and-upload-data-to-oss$domain = ''; // 访问oss文件的域名$bucket = ''; // 空间名称$accessKey = '';$secretKey = '';$endpoint = ''; // 上传文件的地址,例如:https://{bucket名称}.oss-cn-shenzhen.aliyuncs.com$prefix = ''; // 指定bucket目录前缀$dir = $prefix . '/' . date('Ymd') . '/'; // 按日期上传到指定目录// https://help.aliyun.com/zh/oss/developer-reference/postobject#section-d5z-1ww-wdb$expire = time() + 3600;$policyArr = ['expiration' => date('Y-m-d\TH:i:s.000\Z', $expire),'conditions' => [['bucket' => $bucket],['content-length-range', 1, 10 * 1024 * 1024],]];$policy = base64_encode(json_encode($policyArr));// https://help.aliyun.com/zh/oss/developer-reference/postobject#section-wny-mww-wdb$signature = base64_encode(hash_hmac('sha1', $policy, $secretKey, true));return ['endpoint' => $endpoint,'host' => $domain,'accessId' => $accessKey,'policy' => $policy,'signature' => $signature,'token' => '','expire' => $expire,'keyTime' => '','algorithm' => '','dir' => $dir,];}public function aliSts(){// https://help.aliyun.com/zh/oss/developer-reference/authorize-access-2try {// 填写步骤1创建的RAM用户AccessKey。$config = new Config(["accessKeyId" => "【填写】","accessKeySecret" => "【填写】"]);//$config->endpoint = "【填写】"; // sts.cn-hangzhou.aliyuncs.com$client =  new Sts($config);$assumeRoleRequest = new AssumeRoleRequest([// roleArn填写步骤2获取的角色ARN,例如acs:ram::175708322470****:role/ramtest。"roleArn" => "【填写】",// roleSessionName用于自定义角色会话名称,用来区分不同的令牌,例如填写为sessiontest。"roleSessionName" => "【填写】",// durationSeconds用于设置临时访问凭证有效时间单位为秒,最小值为900,最大值以当前角色设定的最大会话时间为准。本示例指定有效时间为3000秒。"durationSeconds" => 3000,// policy填写自定义权限策略,用于进一步限制STS临时访问凭证的权限。如果不指定Policy,则返回的STS临时访问凭证默认拥有指定角色的所有权限。// 临时访问凭证最后获得的权限是步骤4设置的角色权限和该Policy设置权限的交集。// "policy" => ""]);$runtime = new RuntimeOptions([]);$result = $client->assumeRoleWithOptions($assumeRoleRequest, $runtime);//printf("AccessKeyId:" . $result->body->credentials->accessKeyId. PHP_EOL);//printf("AccessKeySecret:".$result->body->credentials->accessKeySecret.PHP_EOL);//printf("Expiration:".$result->body->credentials->expiration.PHP_EOL);//printf("SecurityToken:".$result->body->credentials->securityToken.PHP_EOL);}catch (Exception $e){// printf($e->getMessage() . PHP_EOL);return [];}return $result;}public function qcloudPolicy(){// https://cloud.tencent.com/document/product/436/14690$domain = ''; // 访问oss文件的域名$bucket = ''; // 空间名称$accessKey = '';$secretKey = '';$endpoint = ''; // 上传文件的地址,例如:https://{bucket名称}.cos.ap-guangzhou.myqcloud.com$prefix = ''; // 指定bucket目录前缀$dir = $prefix . '/' . date('Ymd') . '/'; // 按日期上传到指定目录$algorithm = 'sha1';$startTime = time();$endTime = time() + 3600;$expiration = date('Y-m-d\TH:i:s.000\Z', $endTime);$keyTime = implode(';', [$startTime, $endTime]);$policyArr = ['expiration' => $expiration,'conditions' => [['acl' => 'default'],['bucket' => $bucket],['q-sign-algorithm' => $algorithm],['q-ak' => $secretId],['q-sign-time' => $keyTime]]];$policy = base64_encode(json_encode($policyArr));$signKey = hash_hmac($algorithm, $keyTime, $secretKey);$stringToSign = sha1(json_encode($policyArr));$signature = hash_hmac($algorithm, $stringToSign, $signKey);return ['endpoint' => $endpoint,'host' => $domain,'accessId' => $secretId,'policy' => $policy,'signature' => $signature,'token' => '','expire' => $endTime,'keyTime' => $keyTime,'algorithm' => $algorithm,'dir' => $dir,];}public function qcloudSts(){// https://cloud.tencent.com/document/product/436/14048// https://github.com/tencentyun/qcloud-cos-sts-sdk/blob/master/php/demo/sts_test.php$domain = config('oss.qcloud_domain');$bucket = config('oss.qcloud_bucket');$secretId = config('oss.qcloud_access_key');$secretKey = config('oss.qcloud_secret_key');$endpoint = config('oss.qcloud_endpoint');$prefix = config('oss.qcloud_bucket_key_prefix');$dir = $prefix . '/' . date('Ymd') . '/';$region = 'ap-guangzhou';$sts = new \QCloud\COSSTS\Sts();$config = array('url' => 'https://sts.tencentcloudapi.com/', // url和domain保持一致'domain' => 'sts.tencentcloudapi.com', // 域名,非必须,默认为 sts.tencentcloudapi.com'proxy' => '','secretId' => $secretId, // 固定密钥,若为明文密钥,请直接以'xxx'形式填入,不要填写到getenv()函数中'secretKey' => $secretKey, // 固定密钥,若为明文密钥,请直接以'xxx'形式填入,不要填写到getenv()函数中'bucket' => $bucket, // 换成你的 bucket'region' => $region, // 换成 bucket 所在园区'durationSeconds' => 3600, // 密钥有效期'allowPrefix' => ['*'], // 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径,例子: a.jpg 或者 a/* 或者 * (使用通配符*存在重大安全风险, 请谨慎评估使用)// 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923'allowActions' => array(// 简单上传'name/cos:PutObject','name/cos:PostObject',// 分片上传'name/cos:InitiateMultipartUpload','name/cos:ListMultipartUploads','name/cos:ListParts','name/cos:UploadPart','name/cos:CompleteMultipartUpload'),// 临时密钥生效条件,关于condition的详细设置规则和COS支持的condition类型可以参考 https://cloud.tencent.com/document/product/436/71306'condition' => []);// 获取临时密钥,计算签名$tempKeys = $sts->getTempKeys($config);return $tempKeys ?: [];/**
数据如下:
{"expiredTime": 1691169303,"expiration": "2023-08-04T17:15:03Z","credentials": {"sessionToken": "","tmpSecretId": "","tmpSecretKey": ""},"requestId": "6b274db5-a86b-4e27-a0e9-50f8ae1832f4","startTime": 1691165703
}
*/}
}

表单提交到七牛云

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>七牛云oss upload</title>
</head>
<body>
<form method="post" action="{来自于$data里面的endpoint}" enctype="multipart/form-data"><input type="hidden" name="key" id="key" value=""><input type="hidden" name="token" id="token" value=""><input type="hidden" name="crc32" /><input type="hidden" name="accept" /><input type="file" name="file" id="file" onchange="change(this)" /><input type="submit" value="上传文件" id="submit"/>
</form>
<script>// 实例化oss类,获取数据// $oss = new oss();// $data = $oss->qiniuPolicy();let eleKey = document.getElementById('key');let eleToken = document.getElementById('token');eleToken.value = ''; // 来自$data里面的tokenfunction change(obj) {let uploadDir = ''; // 来自$data里面的dirlet fname = uploadDir + obj.files[0]['name'];console.log(fname);eleKey.value = fname;}
</script>
</body>
</html>

表单提交到阿里云

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>阿里云oss upload</title>
</head>
<body>
<form method="post" action="{来自于$data里面的endpoint}" enctype="multipart/form-data"><input type="hidden" name="key" id="key" value=""><input type="hidden" name="OSSAccessKeyId" id="accessKey" value=""><input type="hidden" name="policy" id="policy" value=""><input type="hidden" name="signature" id="signature" value=""><input name="file" type="file" id="file" onchange="change(this)" /><input type="submit" value="上传文件" id="submit"/>
</form>
<script>// 实例化oss类,获取数据// $oss = new oss();// $data = $oss->aliPolicy();let eleKey = document.getElementById('key');let eleAccessKey= document.getElementById('accessKey');let elePolicy = document.getElementById('policy');let eleSignature = document.getElementById('signature');eleAccessKey.value = ''; // 来自$data里面的accessIdelePolicy.value = ''; // 来自$data里面的policyeleSignature.value = ''; // 来自$data里面的signaturefunction change(obj) {let uploadDir = ''; // 来自$data里面的dirlet fname = uploadDir + obj.files[0]['name'];console.log(fname);eleKey.value = fname;}
</script>
</body>
</html>

 表单提交到阿里云(sts)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><title>阿里云oss upload</title>
</head>
<body>
<input id="file" type="file" />
<button id="upload">上传</button>
<script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.16.0.min.js"></script>
<script>// yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。let region = '';// 填写Bucket名称。let bucket = '';// 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。// 从STS服务获取的安全令牌(SecurityToken)。let stsData = {AccessKeyId:"",AccessKeySecret:"",Expiration:"",SecurityToken:""};const client = new OSS({// yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。region: region,// 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。accessKeyId: stsData.AccessKeyId,accessKeySecret: stsData.AccessKeySecret,// 从STS服务获取的安全令牌(SecurityToken)。stsToken: stsData.SecurityToken,// 填写Bucket名称。bucket: bucket});// 从输入框获取file对象,例如<input type="file" id="file" />。let data;// 创建并填写Blob数据。//const data = new Blob(['Hello OSS']);// 创建并填写OSS Buffer内容。//const data = new OSS.Buffer(['Hello OSS']);const upload = document.getElementById("upload");async function putObject (data) {try {// 填写Object完整路径。Object完整路径中不能包含Bucket名称。// 您可以通过自定义文件名(例如exampleobject.txt)或文件完整路径(例如exampledir/exampleobject.txt)的形式实现将数据上传到当前Bucket或Bucket中的指定目录。// data对象可以自定义为file对象、Blob数据或者OSS Buffer。const result = await client.put("1.png",data);console.log(result);} catch (e) {console.log(e);}}upload.addEventListener("click", () => {const data = file.files[0];putObject(data);});
</script>
</body>
</html>

表单提交到腾讯云

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>腾讯云oss upload</title>
</head>
<body>
<form method="post" action="{来自于$data里面的endpoint}" enctype="multipart/form-data"><input type="hidden" name="key" id="key" value=""><input type="hidden" name="acl" id="acl" value="default"><input type="hidden" name="policy" id="policy" value=""><input type="hidden" name="q-sign-algorithm" id="algorithm" value=""><input type="hidden" name="q-ak" id="ak" value=""><input type="hidden" name="q-key-time" id="keyTime" value=""><input type="hidden" name="q-signature" id="signature" value=""><input type="file" name="file" id="file" onchange="change(this)" /><input type="submit" value="上传文件" id="submit"/>
</form>
<script>// 实例化oss类,获取数据// $oss = new oss();// $data = $oss->qcloudPolicy();let eleKey = document.getElementById('key');let elePolicy = document.getElementById('policy');let eleAlgorithm = document.getElementById('algorithm');let eleAK = document.getElementById('ak');let eleKeyTime = document.getElementById('keyTime');let eleSignature = document.getElementById('signature');elePolicy.value = ''; // 来自$data里面的policyeleAlgorithm.value = ''; // 来自$data里面的algorithmeleAK.value = ''; // 来自$data里面的accessIdeleKeyTime.value = ''; // 来自$data里面的keyTimeeleSignature.value = ''; // 来自$data里面的signaturefunction change(obj) {let uploadDir = ''; // 来自$data里面的dirlet fname = uploadDir + obj.files[0]['name'];console.log(fname);eleKey.value = fname;}
</script>
</body>
</html>

表单提交到腾讯云(sts) 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>腾讯云oss upload</title>
</head>
<body>
<form method="post" action="https://test-1312063917.cos.ap-guangzhou.myqcloud.com" enctype="multipart/form-data"><input type="hidden" name="x-cos-security-token" id="token" value=""><input type="hidden" name="key" id="key" value=""><input type="file" name="file" id="file" onchange="change(this)" /><input type="submit" value="上传文件" id="submit"/>
</form>
<script>// 实例化oss类,获取数据// $oss = new oss();// $data = $oss->qcloudSts();let eleKey = document.getElementById('key');let eleToken = document.getElementById('token');eleToken.value = ''; // $data['credentials']['sessionToken']function change(obj) {let uploadDir = ''; // 来自$data里面的dirlet fname = uploadDir + obj.files[0]['name'];console.log(fname);eleKey.value = fname;}
</script>
</body>
</html>

相关文章:

使用七牛云、阿里云、腾讯云的对象存储上传文件

说明&#xff1a;存在部分步骤省略的情况&#xff0c;请根据具体文档进行操作 下载相关sdk composer require qiniu/php-sdkcomposer require aliyuncs/oss-sdk-php composer require alibabacloud/sts-20150401composer require qcloud/cos-sdk-v5 composer require qcloud_s…...

使用阿里云DataX完成数据同步

DataX DataX 是阿里云 DataWorks 数据集成的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, datab…...

《Kali渗透基础》13. 无线渗透(三)

kali渗透 1&#xff1a;无线通信过程1.1&#xff1a;Open 认证1.2&#xff1a;PSK 认证1.3&#xff1a;关联请求 2&#xff1a;加密2.1&#xff1a;Open 无加密网络2.2&#xff1a;WEP 加密系统2.3&#xff1a;WPA 安全系统2.3.1&#xff1a;WPA12.3.2&#xff1a;WPA2 3&#…...

python——案例六:判断字符串的长度

案例六&#xff1a;判断字符串的长度str"Study"print(len(str))#输出结果如下&#xff1a; #5...

PC-windows-安卓-Linux音频系统框架概论

+我V hezkz17进数字音频系统研究开发交流答疑群(课题组) 一 PC 音频系统工作原理 PC音频系统的工作原理可以简要概括为以下几个步骤: 音频输入:音频信号可以通过多种方式输入到计算机,例如麦克风、线路输入、数字音频接口等。这些音频源会将声音转换为电信号。 模数转换…...

Web Worker API

Web Worker API Web Worker 使得在一个独立于 Web 应用程序主执行线程的后台线程中运行脚本操作成为可能。这样做的好处是可以在独立线程中执行费时的处理任务&#xff0c;使主线程&#xff08;通常是 UI 线程&#xff09;的运行不会被阻塞/放慢。 Web Worker概念与用法 Wor…...

1.4 MA多头/空头排列是真的吗?

MA策略验证——金叉和死叉 文章目录 MA策略验证——金叉和死叉公共代码论证步骤论证代码论证结果写在最后公共代码 code = 注意,这里改成股票代码 pro = ts.pro_api(tushare的token)df = pro.daily(ts_code=code)[...

基于SpringBoot+Vue的CSGO赛事管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…...

Android系统APP之SettingsProvider

前言 SettingsProvider顾名思义是一个提供设置数据共享的Provider&#xff0c;SettingsProvider和Android系统其它Provider有很多不一样的地方&#xff0c;如&#xff1a; SettingsProvider只接受int、float、string等基本类型的数据&#xff1b;SettingsProvider由Android系…...

go入门实践二-tcp服务端

文章目录 前言接口与方法并发-协程项目管理bufio包使用其他代码 前言 上一篇&#xff0c;我们通过go语言的hello-world入门&#xff0c;搭建了go的编程环境&#xff0c;并对go语法有了简单的了解。本文实现一个go的tcp服务端。借用这个示例&#xff0c;展示接口、协程、bufio的…...

SprinMVC获取请求参数

SprinMVC获取请求参数 Spring MVC 提供的获取请求参数的方式 通过 HttpServletRequest 获取请求参数通过控制器方法的形参获取请求参数使用 RequestParam 注解获取请求参数通过实体类对象获取请求参数&#xff08;推荐&#xff09; 通过ServlstAPI获取 将HttpServletRequest…...

orangepi 4lts ubuntu安装RabbitMQ

4lts的emmc 系统安装选文件系统格式 ext4 需先安装erlang&#xff1a; sudo apt install erlang 安装RabbitMQ: sudo apt install rabbitmq-server - 添加用户以便远程访问&#xff1a; - 账号密码都是admin: sudo rabbitmqctl add_user admin admin -sudo rabbitmqct…...

SolidWorks 3D Interconnect介绍

目前市面上有的三维设计软件有很多&#xff0c;如UG、Pro/E、CATIA等&#xff0c;而且每个三维设计软件都会生成自己文件格式。由于产品设计的原因&#xff0c;我们避免不了的会需要去使用不同三维设计软件的文件&#xff0c;这对于工程师来说其实是一件比较麻烦的事。 为什么…...

MBG中update语句的区别

int updateByPrimaryKey(User record) thorws SQLException 按主键更新 int updateByPrimaryKeySelective(User record) thorws SQLException 按主键更新值不为null的字段 使用以上的方式更新数据时必须提供主键&#xff0c;MyBatis根据主键进行数据记录的更新。 int updateBy…...

论文阅读 - Few-shot Network Anomaly Detection via Cross-network Meta-learning

论文链接&#xff1a;https://arxiv.org/pdf/2102.11165.pdf 目录 摘要&#xff1a; 引言 问题定义 方法 Graph Deviation Networks Cross-network Meta-learning 摘要&#xff1a; 网络异常检测旨在找到与绝大多数行为显着不同的网络元素&#xff08;例如节点、边、子图…...

秋招算法备战第37天 | 738.单调递增的数字、968.监控二叉树、贪心算法总结

738. 单调递增的数字 - 力扣&#xff08;LeetCode&#xff09; 这个问题是关于找到一个小于或等于给定数字n的最大单调递增数字。 我们可以将数字n转换为字符数组&#xff0c;然后从左到右扫描&#xff0c;寻找第一个违反单调递增条件的位置。一旦找到这样的位置&#xff0c;…...

Windows server上用nginx部署vue3项目

Windows server上用nginx部署vue3项目 一、Node中node_modules文件夹及package.json文件的作用说明二、VUE3项目打包三、Windows Server上的Nginx部署 一、Node中node_modules文件夹及package.json文件的作用说明 node_modules是安装node后用来存放用包管理工具下载安装的包的…...

计算机视觉与图形学-神经渲染专题-pi-GAN and CIPS-3D

《pi-GAN: Periodic Implicit Generative Adversarial Networks for 3D-Aware Image Synthesis》 摘要 我们见证了3D感知图像合成的快速进展&#xff0c;利用了生成视觉模型和神经渲染的最新进展。然而&#xff0c;现有的方法在两方面存在不足&#xff1a;首先&#xff0c;它们…...

【FAQ】EasyGBS平台通道显示在线,视频无法播放并报错400的排查

EasyGBS是基于国标GB28181协议的视频云服务平台&#xff0c;它可以支持国标协议的设备接入&#xff0c;在视频能力上能实现直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台级联等功能&#xff0c;既能作为业务平台使用&#xff0c;也能作为能力层平台调用。 我…...

G1和CMS

G1垃圾回收器要点&#xff1a; 1.什么是G1垃圾回收器&#xff1a; G1是一款专门针对于拥有多核处理器和大内存的机器的收集器&#xff0c;在满足了GC响应时间的延迟可控的情况下&#xff0c;也会尽可能提高的程序的吞吐量 2.G1垃圾回收器的优点&#xff1a; ①与CMS收集器一…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...