客户端JavaScript的IO操作
1.本地磁盘IO----"点击"读取
1.1 创建FileReader对象
FileReader对象是用于IO操作中的读取操作
let fd = new FileReader()
1.2 利用FileReader对象读取文件
fd.readAsArrayBuffer() 异步读取一个文件,返回ArrayBuffer
fd.readAsBinaryString() 异步读取一个文件,返回二进制形式
fd.readAsDataURL() 异步读取一个文件,返回Base64编码形式
fd.readAsText() 异步读取一个文件,返回文本形式
1.3 设置input标签的属性
点击input标签用于打开文件管理器
type属性设置为file,表示input标签用于读取文件
multiple属性可以选择性设置为multiple,表示是否允许读取多个文件
监听change事件
<input type="file" multiple="multiple" onchange="handleChanged()">
<script>function handleChanged() {// 遍历打开的所有文件Array.prototype.forEach.call(event.target.files, (file => {let fd = new FileReader()// 使用ArrayBuffer存储fd.readAsArrayBuffer(file)fd.onload = function(event) {console.log(event.target.result)}}))}
</script>
1.4 特殊样式的点击读取
在实际使用中我们通常并不直接使用input标签,因为样式往往不符合需求,可以使用如下方式解决。
设置display属性来隐藏input标签
创建一个点击上传按钮,在按钮上设置我们期望的样式
设置该按钮点击时会触发input标签的点击事件
<div style="width: 100px; height: 100px; background: blue;" onclick="handleClick()"></div>
<input type="file" style="display: none;" onchange="handleChanged()" id="input">
<script>let input = document.querySelector("#input");function handleClick() {input.click()}function handleChanged() {// 假设只允许读取一个文件let fd = new FileReader(), file = event.target.files[0]fd.readAsDataURL(file)fd.onload = function(event) {console.log(event.target.result)}}
</script>
2.本地磁盘IO----"拖拽"读取
2.1 基本拖拽事件学习
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OQXQwtUd-1642742142310)(./assests/dragEvent.png)]
draggable = true 表示元素允许拖拽
- ondragstart 拖拽开始事件,注册在容器上,用于状态判断和拖拽信息携带
- ondragenter 拖拽进入容器事件,注册在容器上,用于状态判断
- ondragover 拖拽进入容器事件,注册在容器上,需要禁用默认事件,默认事件禁止拖入容器
- ondragleave 拖拽离开容器事件,注册在容器上,用于状态判断
- ondrop 拖拽鼠标释放事件,注册在容器上,需要禁用默认事件,用于读取拖拽信息并放置拖拽元素
- ondragend 拖拽结束事件,用于状态判断
2.2 基本拖拽事件演示
<div style="border: 1px solid black; width: 200px; height: 100px;"ondragstart="handleDragStart()"ondrop="handleDrop()"ondragover="handleDragOver()"ondragenter="handleDragEnter()"ondragleave="handleDragLeave()"ondragend="handleDragEnd()"><p draggable="true" id="p">Danny</p>
</div><div style="border: 1px solid black; width: 200px; height: 100px; margin-top: 44px;"ondragstart="handleDragStart()"ondrop="handleDrop()"ondragover="handleDragOver()"ondragenter="handleDragEnter()"ondragleave="handleDragLeave()"ondragend="handleDragEnd()"></div>
<script>// ondragstart// 当开始拖动时触发function handleDragStart() {// 将拖动元素的id加入拖动事件的属性,当拖动结束时能够找到该拖动元素event.dataTransfer.setData("Danny", event.target.id)}// ondragenter// 当拖动元素进入该容器时触发function handleDragEnter() {console.log("进入容器", event.target)}// ondragleave// 当拖动元素离开该容器时触发function handleDragLeave() {console.log("离开容器", event.target)}// ondragend// 完成拖动时触发function handleDragEnd() {console.log("完成拖放")}// ondrop// 当拖动时鼠标释放时触发function handleDrop() {// 原生事件禁止拖入其它地方event.preventDefault()// 将拖动元素放入当前元素event.target.append(document.querySelector(`#${event.dataTransfer.getData("Danny")}`))}// ondragover// 当拖动元素进入某个容器时触发function handleDragOver() {// 原生事件禁止拖入其它地方event.preventDefault()}
</script>
2.3 拖拽读取
给容器注册ondrop事件,禁止原生事件,使用FileReader读取
给容器注册ondragover事件,禁止原生事件
<div style="width: 200px; height: 100px; border: 1px solid black;" ondrop="handleDrop()" ondragover="handleDragOver()"></div>
<script>function handleDragOver() {event.preventDefault()}function handleDrop() {event.preventDefault()// 这里默认只拖拽上传一个文件let file = event.dataTransfer.files[0]let fd = new FileReader()fd.readAsArrayBuffer(file)fd.onload = function(event) {console.log(event.target.result)}}
</script>
2.4 读取的进度问题
FileReader的实例化对象,可以监听读取的进度
fd.onprogress = function(event) {console.log(event.loaded)
}
3.本地磁盘IO----写入
3.1 对象URL与Blob
Blob表示二进制大对象。在客户端JavaScript的IO中Blob对象和File对象处于相等的地位(但实际上File是Blob的子类),都是表示一个二进制大文件。
对象URL和Blob,File地位不同。Blob和File理解为整个二进制大文件,对象URL理解为指向文件的URL,不包含文件本身。生成对象URL可以使用URL.createObjectURL()来实现,参数可以是File或Blob。
3.2 a标签写入
设置a标签的href属性为对应的资源的URL,如果没有URL,可以获取该文件,再通过对象URL来生成URL
设置a标签的download属性为你希望的文件下载名称
3.3 特殊样式的a标签写入
同样是类似于上文提到的灵活使用input的问题
设置a标签的display属性为none,隐藏之
设置新的点击下载元素,将其点击事件设置为触发a标签的点击事件
4.网络IO----下载
4.1 客户端JavaScript的可读流学习
可读流对象:ReadableStream
可控可读流:在构造函数中传入参数{ start(control){} },表示可读流控制参数
可控可读流的封装:在start函数中,通过control.enqueue向可读流写入数据,当数据写完后使用control.close关闭可读流
可控可读流的读:通过ReadableStream.getReader()获取读锁S,能够安全读。之后调用读锁S.read()读取数据,read()实际上是调用异步迭代器的next()方法,详情见“JavaScript异步编程”博客。
<script>// 创建一个异步迭代器,这里通过生成器实现let asyncIter = (function* asyncMaker() {for (let i = 0; i < 5; i++)yield new Promise(res => setTimeout(res.bind(globalThis, i), 1000))})();// 创建一个可读流,封装底层数据let stream = new ReadableStream({async start(control) {// 遍历异步迭代器,把数据装入可读流for await(let value of asyncIter)control.enqueue(value)// 写入数据后可读流关闭control.close()}});// 获取可读流的读锁let readLock = stream.getReader();// 自动读取可读流,这里采用递归形式(function () {let that = arguments.calleereadLock.read().then(res => {if (!res.done) {console.log(res.value)that()}})})();
</script>
4.2 fetchAPI实现网络IO下载进度条
通过获取可读流response.getReader().read()的每一数据块大小,来获知当前下载进度
网页代码
<p>下载中</p>
<progress id="progress" value="0"></progress>
<script>// 实际时间是:网络中的数据流传输时间 + 数据流转为二进制对象的时间 + 本地磁盘IO时间 (仅列举三个耗时时延)// 进度条显示的时间是:网络中的数据流传输时间// 这种问题在XHR中也是如此,大文件可以直接用a标签下载,只是无法定制样式来显示进度let progress = document.querySelector("#progress")fetch("test.mp4").then(res => {let size = res.headers.get("Content-Length")let readLock = res.body.getReader()let sum = 0// 设置进度条容量progress.max = sizelet stream = new ReadableStream({async start(control) {while(true) {let { done, value } = await readLock.read()if(done) {control.close()break}sum += value.lengthprogress.value = sum// 将数据块放入新的流中,当读取完毕后,readLock流已经到头,想后续交给a标签下载就需要一个新的从头开始的流control.enqueue(value)}}})return new Response(stream)}).then(res => res.blob()).then(blob => {let a = document.createElement("a")a.style.display = "none"a.href = URL.createObjectURL(blob)a.download = "视频.mp4"document.body.prepend(a)a.click()// 回收URL内存并移除a标签,相当于减少一个对该文件的引用URL.revokeObjectURL(a.href)document.body.firstElementChild.remove()})
</script>
代理服务器代码
视频test.mp4 (以下代码按照mp4格式) 放在当前目录下,虽然是放在本地,实际上本地回路测试时数据要通过回路测试网卡,也会有网络时延。
let fs = require("fs").promises
require("http").createServer((req, res) => {if(req.url.includes("html")) {fs.readFile("." + req.url).then(data => {res.writeHead(200, {"Content-Type": "text/html"})res.write(data)res.end()})} else if(req.url.includes("mp4")) {fs.readFile("." + req.url).then(data => {res.writeHead(200, {"Content-Type": "video/mp4","Content-Length": data.length})res.write(data)res.end()})}
}).listen(3000)
如果下载速度过快,可以在调试台中设置一下下载速度限制,以便于更清晰显示进度条进度。如下是在谷歌浏览器中设置,设置下载速度为2MB每秒,图中单位是bit/s。
4.3 XHR实现网络IO下载进度条
通过监听xhr.onprogress事件来获取下载进度
注意:注意设置responseType,否则接收乱码
网页代码
<p>下载中</p>
<progress id="progress" value="0"></progress>
<script>let progress = document.querySelector("#progress")let xhr = new XMLHttpRequest()xhr.open("get", "test.mp4")xhr.responseType = "blob"xhr.send(null)xhr.onload = function() {if(xhr.readyState === 4 && xhr.status === 200)xhrCallback(xhr.response)}xhr.onprogress = function(event) {progress.max = event.totalprogress.value = event.loaded}function xhrCallback(res) {console.log(res)let a = document.createElement("a")a.href = URL.createObjectURL(res)a.download = "视频.mp4"a.style.display = "none"document.body.append(a)a.click()URL.revokeObjectURL(a.href)document.body.lastElementChild.remove()}
</script>
代理服务器代码同上
5.网络IO----上传
5.1 FormData序列化与JSON序列化
上传操作在这里默认使用post方法携带载荷(payload),载荷即为HTTP请求的body部分。客户端发请求时body需要序列化后才能正确地被服务端接收。
JSON序列化:JSON进行序列化时是结构化克隆,但是有缺陷,有些特殊的引用类型无法结构化克隆(详情见另一篇博客“JavaScript数据深拷贝和浅拷贝”)
FormData序列化:使用时比JSON要稍微麻烦些,但是能够解决二进制文件传输,传输可以是字符串或Blob类型。如果想传输Blob对象,JSON序列化无法对其结构化克隆,但是FormData可以正常传输。
5.1.1 FormData的演示
网页代码
<script>let fd = new FormData()fd.append("name", "Danny")fd.append("age", "20")fd.append("gender", "man")fetch("/Vanghua", {method: "post",body: fd}).then(res => res.text()).then(console.log)
</script>
服务器代码
let fs = require("fs").promises
require("http").createServer((req, res) => {if(req.url.includes("html")) {fs.readFile("." + req.url).then(data => {res.writeHead(200, {"Content-Type": "text/html"})res.write(data)res.end()})} else if(req.url.includes("Vanghua")) {req.on("data", function(chunk) {console.log(chunk.toString())})res.writeHead(200)res.write("成功")res.end()}
}).listen(3000)
服务器输出
“------WebKitFormBoundaryqd9O7Vy6pSDqNKIq” 为字段分隔符。在Content-Type中会自动加上boundary字段,该字段值为此分隔符。
------WebKitFormBoundaryqd9O7Vy6pSDqNKIq
Content-Disposition: form-data; name=“name”Danny
------WebKitFormBoundaryqd9O7Vy6pSDqNKIq
Content-Disposition: form-data; name=“age”20
------WebKitFormBoundaryqd9O7Vy6pSDqNKIq
Content-Disposition: form-data; name=“gender”man
------WebKitFormBoundaryqd9O7Vy6pSDqNKIq–
5.1.2 FormData字段的分割
网页代码
<script>let fd = new FormData()fd.append("name", "Danny")fd.append("age", "20")fd.append("gender", "man")fd.append("school", JSON.stringify({name: "SDU",age: 120}))fetch("/Vanghua", {method: "post",body: fd}).then(res => res.text()).then(console.log)
</script>
服务器代码
注:下面的切割代码只适用于切割普通传输字符串,不适合媒体传输的切割
let fs = require("fs").promises
require("http").createServer((req, res) => {if(req.url.includes("html")) {fs.readFile("." + req.url).then(data => {res.writeHead(200, {"Content-Type": "text/html"})res.write(data)res.end()})} else if(req.url.includes("Vanghua")) {let ct = req.headers["content-type"]let boundary = ct.slice(ct.indexOf("boundary") + 9)let data = ""req.on("data", function(chunk) {// 接收到的chunk,是Buffer类型数据,是流数据,用data拼接并转化为字符串形式data += chunk})req.on("end", function() {// 将拼接好的数据块交给分割函数处理分隔符,获取最终的结果对象let res = getData(data, boundary)console.log(res)})res.writeHead(200)res.write("成功")res.end()}
}).listen(3000)// 分割FormData的数据
function getData(str, boundary) {let res = {}// 分隔符实际应用时前面还有两个"--"boundary = "--" + boundarywhile(str.length) {// 每一个分隔符后面跟一个回车+换行,所以额外切除2个str = str.slice(str.indexOf(boundary) + boundary.length + 2)// 在最后一个字段的末尾也会有一个分隔符,至此切割完会剩下一个回车+换行,避免下面再给res赋空key和空value,直接退出if(str.length === 2)breaklet keyStart = str.indexOf("name") + 6// 键的终止位置:键后是回车+换行。找到回车的位置,之后-1到达“的位置,由于slice左闭右开,因此到达”即可let keyEnd = str.indexOf("\r") - 1// 值的起始位置:第一个换行是在键的末尾,键的末尾是回车+换行。键下面还有一空行,是回车+换行。空行下面是值,因此要加3.let valueStart = str.indexOf("\n") + 3// 减2是减去回车+换行let valueEnd = str.indexOf(boundary) - 2let key = str.slice(keyStart, keyEnd)let value = str.slice(valueStart, valueEnd)res[key] = value}return res
}
服务端输出
{
name: ‘Danny’,
age: ‘20’,
gender: ‘man’,
school: ‘{“name”:“SDU”,“age”:120}’
}
5.1.3 使用Multiparty包解决FormData的切割
npm install Multiparty来安转处理FormData的包
下面演示了基本用法:
对于普通字段,可以实现5.1.2中实现的getData函数的功能,通过fields访问普通字段。(字段形式是 key: [value])
对于Blob类型,可以通过files来访问,下述代码演示了服务器收到客户端的上传视频,并将其保存的代码。
let fs = require("fs").promises
let fss = require("fs")
let multiparty = require("multiparty")
require("http").createServer((req, res) => {if(req.url.includes("html")) {fs.readFile("." + req.url).then(data => {res.writeHead(200, {"Content-Type": "text/html"})res.write(data)res.end()})} else if(req.url.includes("Vanghua")) {// 使用multiparty来解析传来的FormDatalet form = new multiparty.Form()form.parse(req, function(err, fields, files) {// fields中保存普通数据,files中保存文件数据(传过来的Blob类型)if(files.video[0]) {// file.path是当前视频缓存地址,multiparty解析FormData中的文件后保存到缓存let file = files.video[0]// 将缓存中的视频读写到指定位置let readStream = fss.createReadStream(file.path)let writeStream = fss.createWriteStream("./Danny.mp4")readStream.pipe(writeStream)// 监听流的状态writeStream.on("finish", function() {console.log("写入完成")})// 清除C盘缓存中的视频fss.unlinkSync(file.path)}res.writeHead(200)res.write("成功")res.end()})}
}).listen(3000)
5.1.4 FormData的使用注意事项
在客户端使用FormData时,注意HTTP请求的Headers中的Content-Type,FormData会自动将其加上boundary,并且会根据你所传输的内容自动生成Content-Type。自己写Content-Type很容易写错,网络博客不少博文反应自己认为正确的Content-Type却报错了。因此可以忽略请求中的Content-Type的设置。
5.2 上传显示进度条
上传进度条只能有XHR来完成,通过监听XHR的upload的onprogress事件来完成。在下载时fetch可以收到数据流,但是在上传时无法获取fetch的数据流,监听进度无从下手。
网页代码
下面代码演示还是以视频为例
<input style="display: none;" type="file" accept="video/*" id="input" onchange="handleChanged()"/>
<button onclick="handleClick()">选择上传文件</button>
<p>上传中</p>
<progress id="progress" value="0"></progress>
<video id="video" style="display: block;" controls></video>
<script>let progress = document.querySelector("#progress")let input = document.querySelector("#input")function handleClick() {input.click()}function handleChanged() {// 实现视频预览video.src = URL.createObjectURL(event.target.files[0])let xhr = new XMLHttpRequest()xhr.open("post", "/Vanghua")// 监听进度xhr.upload.onprogress = function(event) {progress.max = event.totalprogress.value = event.loaded}// 接收服务端回复xhr.onload = function() {console.log(xhr.responseText)}// 通过5.1介绍的FormData挂载let fd = new FormData()fd.append("video", event.target.files[0])xhr.send(fd)}
</script>
服务端代码同5.1.3中的代码
5.3 上传问题----断点重传
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 构建线上线下一体化解决方案,旺小宝以AI赋能房企数智化营销|爱分析访谈
1、需求和技术驱动房地产营销数字化升级 “三道红线”“限购限贷”各种政策连番调控,消费者购房正在逐步回归理性,回到商品本身;消费者决策线上化,选择多元化导致供需反转,渠道效率领先。房企自身营销效果渐渐式微&am…...
2024/4/14 10:33:04 - Mybatis的初步理解
Mybatis的初步理解 大家好,我是小学五年级在读的蒟蒻,专注于后端,一起见证蒟蒻的成长,您的评论与赞与关注是我的最大动力,如有错误还请不吝赐教,万分感谢。一起支持原创吧!纯手打有笔误还望谅解…...
2024/4/14 10:33:14 - 大数据导论与Linux安装
大数据导论与Linux安装 &导论 一、企业数据分析方向 ①原因分析:分析过去的数据 ,面向历史(离线) ②现状分析:分析当下的数据 (实时) ③预测分析:结合数据预测未来 (机器学习) 以上三个方向正好对应大数据中的离线分析、实时分析、机器学习 实时分析又叫流…...
2024/4/7 15:21:10 - 多线程学习二,线程生命周期和线程中断
多线程学习二,线程生命周期和线程中断 1. Java线程生命周期 思维导图: 示意图: 2. 线程中断 思维导图: 在java的世界里,Thread类是对线程概念的抽象。想要中断一个线程有两种方式: (1&#…...
2024/4/20 10:03:59 - 中国品牌授权市场规模分析:2020年中国授权商品零售额为1106亿元,同比增长11.5%[图]
一、概述 品牌授权又称品牌许可,是指授权者将自己所拥有或代理的商标或品牌等以合同的形式授予被授权者使用;被授权者按合同规定从事经营活动(通常是生产、销售某种产品或者提供某种服务),并向授权者支付相应的费用—…...
2024/4/14 10:32:44 - 融合领域知识的医疗推理技术
融合领域知识的医疗推理技术 1. 智慧医疗现状 市场规模:2025年全球276亿美元 全球发展格局:中美两国智慧医疗发展双足鼎力,日本、英国、以色列紧随其后。 国内现状: 医疗资源分布不均衡 感知到认知智能的过渡 AI医学影像率先…...
2024/4/19 8:23:26 - Xftp7和Xshell的安装,把Windows文件传到CentOS7
Xftp7的安装,把Windows文件传到CentOS7一、下载Xftp7二、安装Xftp7三、 Xftp7连接Centos四、安装Xshell7五、Xshell连接Centos一、下载Xftp7 官网下载:https://www.xshellcn.com/ 我已经下载下来了,上传到了网盘,可以通过网盘下载…...
2024/4/14 10:32:39 - Sympy简单教程(4)
SymPy - 极限Limit 这一部分是作者添加的微积分部分内容, 具体也可以参考作者的另一篇博文 Python上的高等数学实验_leotzf的博客-CSDN博客 计算一元函数极限 from sympy import * from sympy.abc import x,y limit((1-cos(x))/x**2,x,0) 输出结果 单侧极限 Limit命令默认…...
2024/4/16 7:47:09 - 大数据之Redis单节点安装教程
文章目录Redis安装教程下载Redis使用Xftp上传Redis压缩包解压安装编译所需的依赖编译配置环境变量前台启动redis复制配置文件修改配置文件编辑service文件启动、停止、重启Redis服务后台启动关闭Redis安装教程 下载Redis Redis下载 点击上方链接,即可进入Redis下载…...
2024/4/14 10:32:39 - FOFA暂停对外开放
FOFA暂停对外开放 “没有了fofa,你让我拿啥挖洞?!” 一觉醒来,fofa暂停对外开放,被工业和信息化部列为“黑名单”,安全圈炸锅了! 安全圈的里的人fofa应该都比较熟悉了,这里再普及一下…...
2024/4/14 10:33:50 - 已上岸学姐零基础 Java 自学之路(2022年新版,适合0基础)
前言 : 行业现状 自学前你应该知道 自学预估周期 自学教程获取 自学知识点 1、Java SE 2、SQL 3、Java Web 4、常用工具 5、核心框架 6、项目实战 7、面试准备 常见问题 福利 前言如果你想自学 Java,认真看完本文,你以后的职场生涯至少少走1…...
2024/4/14 10:34:00 - kubernetes部署traefik2.5.7
由于想在k8s中部署使用mysql使用,mysql是tcp连接,traefik1.7不支持tcp路由,所以升级到2.5.7 1、镜像 docker pull traefik:v2.5.72、tag docker images | grep traefik traefik v2.5.7 865923368a9f 7 hours ago 101MBdocke…...
2024/4/14 10:33:35 - Java日志的使用
转自:微点阅读 https://www.weidianyuedu.com/content/2517413941359.html 导语 关于日志,在大家的印象中都是比较简单的,只须引入了相关依赖包,剩下的事情就是在项目中“尽情”的打印我们需要的信息了。但是往往越简单的东西越…...
2024/4/14 10:33:55 - 谷粒商城笔记
一:项目介绍 1.1项目背景 谷粒商城是一款B2C的电商平台 1.2电商模式 电商模式:B2B、B2C、C2B、C2C、O2O B—business C—consumer B2C:供应商(商家)直接把商品卖给客户,京东自营,苏宁易购,天猫…...
2024/4/14 10:33:40 - 深入理解Redis集群主从复制原理
一、首先思考一个问题,为什么redis性能这么高还需要分布式方案? 1、实现更高性能:高并发应用,单机性能会有影响,需要更多redis服务器分担压力,实现负载均衡 2、实现高可用:如果单机࿰…...
2024/4/15 10:42:00 - 告别尴尬,自在出行,就选电动车排名前十名的绿源
骑电动车时,一些尴尬事件的发生,常常让人想要换个星球生活。半路没电,一边哼哧哼哧推着走,一边要顶住过往行人异样的目光;轮胎打滑或被扎,随地就是一段“闪电漂移”,徒让路人看表演;…...
2024/4/14 10:33:55 - JavaSE面向对象练习
实验要求 1、创建一个学生类,设置学生的成绩在0-100之间 2、创建一个人类,人类的年龄在0-130之间 3、编写一个类Teacher,代表教员,要求如下:a) 具有属性:姓名,年龄,其中年龄不能 …...
2024/4/14 10:33:50 - 你知道的Hive聚合有多少个
只要我以为,这不是误会,谁会是宝贝 小谈: 今天没有摆烂,今天大早上起来在学校用土豆做的服务器上面选课,说实话奥,分批次选课,顶多不到8000多人、就卡的不得了,咱Java学的不精&#…...
2024/4/19 23:19:41 - Go---Redis使用
Redis 1.Redis是NoSQL数据库,不是传统的关系型数据库 2.Redis: REmote Dlctionary Server(远程字典版务器),Redis性能非常高,单机能够达到 15wqps,通常适合做缓存,也可以持久化。 3.是完全开源免费的,高性能的(k…...
2024/4/19 9:17:25 - 2021年中国数字健康管理潜在市场巨大,发展势头迅猛[图]
数字健康,指开发并利用数字技术普及健康知识及进行相关实践的领域,涵盖物联网、人工智能、大数据等数字技术在健康管理方面的应用。 随着网络信息技术的日益发展,数字技术赋能的医疗健康与传统线下医疗之间的边界将日益模糊,数字…...
2024/4/20 3:35:08
最新文章
- 如何使用PHP进行表单验证?
如何使用PHP进行表单验证? 使用PHP进行表单验证是Web开发中的常见任务。表单验证可以确保用户输入的数据符合特定的格式或要求,从而提高数据的质量和安全性。下面将详细介绍如何使用PHP进行表单验证。 首先,我们需要了解HTML表单的基础知识…...
2024/4/28 1:39:53 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - ChatGPT 赚钱初学者指南(上)
原文:The Beginner’s Guide to Earning Money Online with ChatGPT 译者:飞龙 协议:CC BY-NC-SA 4.0 第一章:理解基础知识 什么是 ChatGPT? 在人工智能与人类对话相遇的数字织锦中,ChatGPT 作为一个突出…...
2024/4/27 11:05:12 - LeetCode-46. 全排列【数组 回溯】
LeetCode-46. 全排列【数组 回溯】 题目描述:解题思路一:回溯。回溯三部曲解题思路二:0解题思路三:0 题目描述: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案…...
2024/4/26 19:51:44 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/26 20:12:18 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/28 1:22:35 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57