当前位置: 首页 > 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收集器一…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...