【前端】-【前端文件操作与文件上传】-【前端接受后端传输文件指南】
目录
- 前端文件操作与文件上传
- 前端接受后端传输文件指南
- 前端excel、word操作指南
-
- excel
- word
前端文件操作与文件上传
一、前端文件上传有两种思路:
- 二进制blob传输:典型案例是formData传输,相当于用formData搭载二进制的blob传给后端
- base64传输:转为base64传输,后端再将base64转回来。简便、耗时
二、与文件相关的对象
- files:通过input标签读过来的文件对象,是blob的子类。
- blob:不可变的二进制内容,包含很多操作方法,切片上传、断点续传都是基于blob的
- formData:用于后端传输的对象。files是一个前端的对象,不能直接传给后端,所以我们需要一个前后端都认可的载体来传递文件,这个载体就是formData。formData就像一辆汽车用来搭载files,这样才能让文件以二进制的形式传到后端
- fileReader:多用于把文件读取为某种形式(如base64、text文件)直接传给后端
三、file参数、blob切割文件、FileReader将文件转成base64,浓缩图/文本预览:
<template><div><input type="file" name="file" @change="fileChange" /><!-- 缩略图,文本预览 --><img style="width:200px;" :src="imgbase64" /><button @click="submit">提交</button></div>
</template><script>
import axios from "axios"
import { fstat } from "fs";
let _fileObj;
export default {name: 'HelloWorld',data() {return {imgbase64: "",}},methods: {fileChange(e) {let file = e.target.files[0]// files是个数组_fileObj = file;// file常用属性:size(大小)、type(类型)、name(文件名)if (file.size > 10 * 24 * 24) {alert("文件不能大于十兆")}if (file.type !== 'video/mp4') {alert("必须是mp4")}// 使用blob的slice方法可以切割文件let _sliceBlob = new Blob([file]).slice(0, 5000);// 切割二进制的0-5000位// 将切割后的Blob对象转成File对象(第二个参数是文件名),之后就可以上传切割后的File对象let _sliceFile = new File([_sliceBlob], "test.png");//将File对象或者Blob对象转成base64或textlet fr = new FileReader();fr.readAsDataURL(_sliceFile);// readAsDataURL是转成base64的方法let self = this;fr.onload = function () {// base64是异步的转换,通过onload方法获得转换结果self.imgbase64 = fr.result// 直接将转换结果赋值给img的src,设置src的大小即可获得浓缩图console.log(fr.result)// 打印结果见下图一}},async submit() {// 这部分的代码后面讲let _formData = new FormData();_formData.append("user", "asdasd");_formData.append("file", _fileObj)axios.post("/xx", _formData);}}}
}
</script>
四、formData:不仅可以搭载文件,还可以搭载文字、input的其他输入
<form action="xxx" method="post">默认情况下提交为query参数</from>
<form action="xxx" method="post" enctype="multipart/form-data">enctype指定提交为formData</from>
五、文件上传:将blob转成FormData上传
async submit() {let _formData = new FormData();_formData.append("user", "asdasd");_formData.append("file", _fileObj)axios.post("/xx", _formData);
}
通过查看网络可以发现:
- 上传内容:
- 请求头content-Type指定了传输内容为form-data,且boundary指定了分割符
- 分隔了两个内容(下面还有一个分割线,即以分割线结尾)
六、转换关系
- 我们直接拿到的是file对象,file对象可以转换成Blob对象,Blob对象也可以转成file对象
- file、blob都可以根据FileReader读成base64或text文本
- 通过接口传输给后端时,只能传输base64、text文本、formData,所以,如果不把file、blob通过FileReader读成base64或text文本,那么就需要把file或者blob append到formData才能通过接口传输
七、具体功能
-
单文件上传(详见前述代码)
-
多文件上传:
File System Access API 允许直接读取、写入或保存对用户设备上的文件和文件夹的更改。从 Chrome 86 开始支持 File System Access API,目前只有基于 Chromium 系列的浏览器全面支持,Safari 部分支持(支持读取,不支持写入和保存),而 Firefox 未支持。
前端接受后端传输文件指南
一、前端把后端传过来的文件下载下来(后端返回给我们的文件一般是二进制的),有以下几种方式:
- 直接打开下载地址:无法命名,只适用于get直接返回blob接口;没有通过项目去发,直接打开了一个窗口,相当于是浏览器请求的,就不会有token,无法做验证
直接在浏览器输入:localhost:8000/download
就可以下载了,或者在代码中使用window.open(地址)
下载
- 利用a标签的download:比较合适的方案
几个重要的概念:
createObjectURL
:把blob对象的内存地址以URL形式给出。接口返回的是二进制传输的文件,那前端就可以拿到这个文件的blob对象,前端把这个blob对象传给createObjectURL
,得到一个URL,然后就可以使用a标签加载这个URL,从而实现下载msSaveBlob
:ie不支持a标签下载,用的是msSaveBlob
方案。如果是ie浏览器,直接调用msSaveBlob
方法,把blob对象给进去,就直接下载下来了- a标签的
download
属性:表面该a标签的行为时下载,并设置文件名
文件下载流程:
(1)
(1)使用blob接收后端传过来的二进制文件
(2)判断浏览器有没有msSaveBlob方法,如果有,说用户使用ie浏览器,直接使用msSaveBlob下载
(3)如果msSaveBlob……(见上图)
注意:msSaveBlob中type的值在打印的res.data中
- file- saver:现成的库,简单方便
(1)安装:npm i file-saver
(2)在代码中引入:import {saveAs} from 'file-saver'
二、前端把后端传过来的blob文件流展示出来(即预览功能)思路:URL除了线上地址外,还有个base64的URL。将后端返回的blob转为base64(使用fileReader),将base64给预览工具
前端excel、word操作指南
excel
对excel操作所用库
xlsx产物转化示意图
调用blob文件流的方法将blob文件流转换为arrayBuffer,将arrayBuffer给xlsx的read方法,read方法将arrayBuffer读取为一个book对象(可以理解为,将整个excel文件转换为js对象,这个js对象就是book对象),然后从book对象里面提取出对应的sheet对象,接下来就可以将这个sheet对象转换为你想要的前端产物(html或json)了,反过来,也可以把前端的html,一般是一个table(一个dom)给过去,转换成一个sheet对象,也可以将前端的json对象转换为sheet对象,然后输出一个excel文件。可以创建一个新的workbook对象,把sheet对象加入到这个新的workbook对象中,然后输出为excel文件
<template><div class="home"><!-- 如果是react,则使用该组件<fileviews fileType="指定预览的文件类型" fielPath="路径"></fileviews>--><!--直接给vueofficeExcel组件的src指定地址即可实现预览,可以给1,线上的路径地址 2,dataURL->base64(将二进制流转换成base64) --><vueofficeExcel v-if="excelSrc" :src="excelSrc" style="height:500px"></vueofficeExcel><button @click="createExcel">创建</button><input type="file" @change="change" /><button @click="loadExcel">加载</button><div class="excel-content" v-html="excelHTML"></div><table ref="excelTable"><thead><tr><td>科目</td><td>人数</td><td>平均分</td></tr></thead><tr><td rowspan="3">数学</td><td>90</td><td>86</td></tr><tr><td>85</td><td>82</td></tr><tr><td>78</td><td>32</td></tr></table></div>
</template><script>
//1,本地选择-》读取为前端html和数据对象
//2,请求-》读取为前端html和数据对象//1,把前端的一个table dom转化为excel
//2,把一个前端对象转化为excel
import axios from "axios";
import vueofficeExcel from "@vue-office/excel";// 由于使用xlsx库进行预览时,预览的excel很原生,很丑,需要我们自己写样式,所以可以使用@vue-office/excel组件,他的预览功能和原生excel一样,假如我们在excel中设置了样式,vueofficeExcel也会展示出来
// 与此相似的还有"@vue-office/docx"、"@vue-office/pdf",他们定义了不同的预览方式
// 如果使用的是react框架,则使用react-file-viewer,该组件支持很多种类型的预览,不管是word、excel还是ppt都使用这一个组件进行预览
// 他也是一个组件,引入注册后直接使用
import "@vue-office/excel/lib/index.css"
import { read, writeFile, utils } from "xlsx"// xlsx是函数式编程
export default {name: 'Home',components: {// 注册vueofficeExcel},data() {return {excelHTML: "",excelSrc: ""}},methods: {loadExcel() {axios.get("http://localhost:8000/download", { responseType: "blob" }).then((res) => {console.log(res.data);res.data.arrayBuffer().then((res) => {const wb = read(res);const sheet1 = wb.Sheets.Sheet1const _data = utils.sheet_to_json(sheet1);const _html = utils.sheet_to_html(sheet1);this.excelHTML = _html})})},createExcel() {let data = [{ name: "张三", id: 100, score: 99 },{ name: "张四", id: 200, score: 99 },{ name: "张五", id: 300, score: 99 }]//转化data数组const ws = utils.json_to_sheet(data);// 将前端的数据转换为sheetconst wb = utils.book_new();// 创建空的excel文件,即book对象utils.book_append_sheet(wb, ws, "people");// 将sheet表加入excel(book对象),并给这个sheet表命名为peoplewriteFile(wb, "test1.xlsx");// 浏览器下载excel,并将其命名为test1.xlsx//转化table domconst tableDom = this.$refs.excelTable;// 获取table的dom元素const tableWs = utils.table_to_sheet(tableDom);// 将dom元素转换为sheet,也可以用table_to_book()直接将其转换为book,然后使用writeFileconst wb2 = utils.book_new();// 创建book对象,即excelutils.book_append_sheet(wb2, tableWs, "sheet1");// 将sheet表加入excel(book对象),并给这个sheet表命名为sheet1writeFile(wb2, "tableTest.xlsx");// 浏览器下载excel,并将其命名为tableTest.xlsx//const wb2=utils.table_to_book(tableDom);},change(e) {let _file = e.target.files[0]// e.target.files[0]拿到的就是blob文件流const fr = new FileReader();// FileReader用于将文件流读取为你想要的格式fr.readAsDataURL(_file);// 将文件流读取为base64fr.onload = (e) => {// 转换完成后获取转换结果this.excelSrc = e.target.result;}/*_file.arrayBuffer().then((res) => {// arrayBuffer()对象本身会返回一个promise// 将blob文件流转换成arrayBuffer,res转换出来的内容const wb = read(res);// 读取arrayBuffer,生成一个book对象const sheet1 = wb.Sheets.Sheet1// 从Sheets中取出Sheet1这张表const _data = utils.sheet_to_json(sheet1);// 将Sheet1表转换为jsonconst _html = utils.sheet_to_html(sheet1);// 将Sheet1表转换为htmlthis.excelHTML = _html// 需要自己给表格写样式})*/}}
}
</script>
<style>
.excel-content table {border-collapse: collapse
}.excel-content td {border: 1px solid black;
}
</style>
在做文件预览功能时,都需要提供src路径,这个src要么是线上地址,要么是dataURL,所以一般我们都会转换一下路径,如果文件是本地选取的,直接将文件线上地址给src,如果文件是接口返回的,那就是个二进制流,使用FileReader将地址转换为dataURL,再给src
word
<template><div class="home"><!--<vueofficedocx v-if="wordPath" :src="wordPath"></vueofficedocx>--><input type="file" @change="change" /><div ref="docxPreview"></div></div>
</template><script>
import vueofficedocx from "@vue-office/docx";
import { renderAsync } from "docx-preview"
import axios from "axios";
import PizZip from 'pizzip'
import Docxtemplater from 'docxtemplater'// 将word里面的内容作为模版,将html中的数据渲染进去。他接收的的内容是经过压缩的内容,所以还需引入pizzip
import { saveAs } from 'file-saver'// 用于保存文件,你给他一个文件流,他可以把这个文件流作为一个文件导出出来,不仅仅用于word
export default {name: 'Home',data() {return {wordPath: ""}},components: {vueofficedocx},methods: {change(e) {/*let _file = e.target.files[0]const fr = new FileReader();fr.readAsDataURL(_file);fr.onload = (e) => {this.wordPath = e.target.result;}*///let _file = e.target.files[0];//blob,arrayBuffer//renderAsync(_file, this.$refs.docxPreview);// renderAsync接收blob/arrayBuffer,并将其渲染到指定dom中进行预览let data = {student: [{ name: "张三", id: 100, score: 99 },{ name: "张四", id: 200, score: 99 },{ name: "张五", id: 300, score: 99 }]}let _file = e.target.files[0];_file.arrayBuffer().then((res) => {let zip = new PizZip(res);// PizZip只能压缩arrayBuffer,所以需要将blob转成arrayBufferconst doc = new Docxtemplater(zip);doc.setData(data)//设置数据doc.render();// 渲染const out = doc.getZip().generate({type: "blob",mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"// 指定word文档的类型})// 渲染完成的二进制流saveAs(out, "test1.docx")// 保存二进制流并将其命名为test1.docx})}}
}
</script>
<style>
.excel-content table {border-collapse: collapse
}.excel-content td {border: 1px solid black;}
</style>
word模版中的内容:
相关文章:
【前端】-【前端文件操作与文件上传】-【前端接受后端传输文件指南】
目录 前端文件操作与文件上传前端接受后端传输文件指南前端excel、word操作指南 excelword 前端文件操作与文件上传 一、前端文件上传有两种思路: 二进制blob传输:典型案例是formData传输,相当于用formData搭载二进制的blob传给后端base…...
Android IO 性能优化:全面解析与实践
文章目录 前言1、文件系统与 I/O 流程原理1.1 文件系统架构1.2 文件 I/O 流程 2、优化策略与场景适用2.1 异步 I/O2.2 合并文件操作2.3 页缓存优化2.4 内存映射文件 3. 性能监控与验证总结 前言 在现代 Android 应用中,I/O 性能直接影响用户体验。流畅的响应速度和…...
利用Docker分层构建优化镜像大小
合适docker镜像文件大小不仅影响容器启动效率,也影响资源占用效率。本文介绍如何利用分层方式构建docker镜像,采用多种方式避免镜像文件太大而影响性能。 Docker 镜像大小优化的重要性 资源利用效率 较小的镜像文件在存储和传输过程中占用更少的空间和带…...
【代码pycharm】动手学深度学习v2-09 Softmax 回归 + 损失函数 + 图片分类数据集
课程链接 1.读取图像分类数据集 import matplotlib.pyplot as plt import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l d2l.use_svg_display() #读取数据集 transtransforms.ToTensor() mnist_…...
docker开启远程访问
1、编辑docker.server文件 vi /usr/lib/systemd/system/docker.service 找到 [Service] 节点,修改 ExecStart 属性,增加 -H tcp://0.0.0.0:2375 ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock -H tcp://0.0.0.0:2…...
Maven插件打包发布远程Docker镜像
dockerfile-maven-plugin插件的介绍 dockerfile-maven-plugin目前这款插件非常成熟,它集成了Maven和Docker,该插件的官方文档地址如下: 地址:https://github.com/spotify/dockerfile-maven 其他说明: dockerfile是用…...
基于STM32的太阳跟踪系统设计
目录 引言系统设计 硬件设计软件设计系统功能模块 太阳位置检测模块伺服驱动控制模块反馈调整模块电源管理模块控制算法 太阳位置估算算法跟踪调整算法代码实现 太阳位置检测与估算伺服电机控制系统反馈与调整系统调试与优化结论与展望 1. 引言 太阳能是一种清洁、可再生的能…...
004-Redis 持久化
Redis 持久化 一、RDB 持久化1.优点:2.缺点:3.实现方式: 二、AOF 持久化1.优点:2.缺点:3.实现方式:4.重写机制5.重写流程: Redis 提供了两种主要的持久化方式:RDB 和 AOF 一、RDB 持…...
类OCSP靶场-Kioptrix系列-Kioptrix Level 1
一、前情提要 Kioptrix Level是免费靶场,可以自己百度下载。 开始前要先将靶机设置和kali同一个网络模式,我这里设置的是NAT。 接下来的靶机用kali进行演示。 二、打靶演示 这个靶机练习,相当于内网渗透。 1. 信息收集 1.1. 主机发现 …...
短视频矩阵系统功能介绍与独立部署流程
一、短视频矩阵系统功能介绍 短视频矩阵系统,作为当前短视频运营的重要工具,凭借其强大的功能,为内容创作者和企业提供了高效、便捷的短视频管理与运营方案。以下是对该系统核心功能的详细介绍: 多平台账号管理ÿ…...
【AI知识】人工智能、机器学习、深度学习的概念与联系
下图来自博客 机器学习和深度学习概念入门 ,图中可明显看到人工智能、机器学习、深度学习三个概念的包含关系,下面简单介绍一下这三个概念已经它们之间的联系。 1. 人工智能(Artificial Intelligence,AI) 概念&#x…...
今天你学C++了吗?——C++中的类与对象(日期类的实现)——实践与知识的碰撞❤
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...
一个简单带颜色的Map
越简单 越实用。越少设计,越易懂。 需求背景: 创建方法,声明一个hashset, 元素为 {“#DE3200”, “#FA8C00”, “#027B00”, “#27B600”, “#5EB600”} 。 对应的key为 key1 、key2、key3、key4、key5。 封装该方法,…...
前端工程化(三)
如何使用 Webpack 优化产出代码? 使用 Webpack 优化产出代码可以通过以下几种方式: 压缩代码:在生产环境中,使用 UglifyJSPlugin 或 TerserPlugin 等插件对代码进行压缩,可以减少代码体积,提高加载速度。…...
SQLAlchemy: Python中的强大数据库工具
SQLAlchemy: Python中的强大数据库工具 SQLAlchemy是一个功能强大的Python库,广泛应用于数据库操作。它提供了一个灵活的数据库抽象层,可以帮助开发者轻松与关系型数据库进行交互。本文将介绍SQLAlchemy的核心组件、常用功能以及它的优势。 1. SQLAlch…...
scala的泛型特质的应用场景
//泛型特质的应用场景 //作比较找出最大值 //定义一个函数,用来求List元素中的最大值参考代码:object Test4 {def getMax[T](list:List[T])(implicit ev:T > Ordered[T]): T {list.reduce((a:T,b:T)> if(a>b) a else b)}def main(args: Array…...
【C++】重载运算与类型转换(七):成员访问运算符
14.7 成员访问运算符 在迭代器类和智能指针类常常用到解引用运算符(*)和箭头运算符(->)。以如下形式向 StrBlobPtr 类添加这两种运算符: class StrBlobPtr {public:std::string& operator*() const{ auto p …...
论文结论:GPTs and Hallucination Why do large language models hallucinate
GPTs and Hallucination 当一个主题有普遍共识,并且有大量语言可用于训练模型时,大模型的输出可以反映出该共识观点在没有足够关于主题的语言示例【晦涩/数据有限】,或者主题有争议,或是对主题没有明确共识的情况下,就…...
修改通过 Docker 部署的 WordPress 上传文件的大小
要修改通过 Docker 部署的 WordPress 上传文件的大小,你可以按照以下步骤操作: 进入 Docker 容器:首先,你需要进入 WordPress 容器内部。可以使用如下命令: docker exec -it wordpress /bin/bash其中wordpress是你的 W…...
微信小程序:实现节点进度条的效果;正在完成的节点有动态循环效果;横向,纵向排列
参考说明 微信小程序实现流程进度功能 - 知乎 上面的为一个节点进度条的例子,但并不完整,根据上述代码,进行修改完善,实现其效果 横向效果 代码 wxml <view classorder_process><view classprocess_wrap wx:for&quo…...
信而泰网络测试仪校准解决方案
一、影响仪表精度的因素 网络测试仪是用于对数据网络及其相关设备性能参数进行测试的仪表,可以模拟网络终端产生流量,进行网络性能测试,对网络状态进行实时监测,分析和统计。数字计量对于精准数据的网络测试仪来说是一剂强心针&a…...
聊聊在应用层面实现内网穿透功能是否可行
前言 最近接手了供方开发的网关项目,交接文档里面有个内网穿透的功能,一下子就吸引的我的目光。实现这个内网穿透的背景是业务部门有些业务是部署在公网,这些公网的业务想访问内网的业务,但因为公网和内网没打通,导致…...
linux 20.04 安装sougou输入法 重启 可视化界面 无法点击
在Linux 20.04(Ubuntu 20.04)系统中安装搜狗输入法后,如果遇到重启后可视化界面无法点击的问题,这通常是由于搜狗输入法或其依赖的输入法框架(如fcitx)与系统的某些部分不兼容所导致的。以下是一些可能的解…...
springboot整合lua脚本在Redis实现商品库存扣减
1、目的 使用lua脚本,可以保证多条命令的操作原子性;同时可以减少操作IO(比如说判断redis对应数据是否小于0,小于0就重置为100,这个场景一般是取出来再判断,再存放进行,就至少存在2次IO,用lua脚…...
lspci简介
lspci命令用于列出系统中所有pci设备信息,其输出信息包括设备的bdf地址(总线号、设备号和功能号)、设备类型、厂商信息等。 lspci命令的基本用法: lspci:列出所有pci设备的详细信息 参数: -v:显示详细信息,包括驱动程序、总线和端口等信息 -t:以属性结构显…...
Java从入门到工作2 - IDEA
2.1、项目启动 从git获取到项目代码后,用idea打开。 安装依赖完成Marven/JDK等配置检查数据库配置启动相关服务 安装依赖 如果个别依赖从私服下载不了,可以去maven官网下载补充。 如果run时提示程序包xx不存在,在项目目录右键Marven->Re…...
Mave下载、安装以及idea(2024)进行配置
目录 Maven简介 Maven下载 配置环境变量 配置本地仓库 在idea环境配置Maven 使用Maven创建工程 创建一个普通的java工程 创建一个Web项目 Maven简介 Maven是一个跨平台的项目管理工具,也是Apache组织中的一个成功的开源项目。它主要服务于基于Java的项目构…...
Spark SQL 执行计划解析源码分析
本文用于记录Spark SQL执行计划解析的源码分析。文中仅对关键要点进行提及,无法面面具到,仅描述大体的框架。 Spark的Client有很多种,spark-sql,pyspark,spark- submit,R等各种提交方式,这里以…...
51c嵌入式~单片机~合集2
我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、不同的电平信号的MCU怎么通信? 下面这个“电平转换”电路,理解后令人心情愉快。电路设计其实也可以很有趣。 先说一说这个电路的用途:当两个MCU在不同的工作电压下工作&a…...
【electron】electron forge + vite + vue + electron-release-server 自动更新客户端
基本信息 electron forge vue页面(中文):https://forge.electron.js.cn/guides/framework-integration/vue-3 electron forge vue页面(英文,中文版下面的tab无法点击):https://www.electronfor…...
FastAPI vs Flask 选择最适合您的 Python Web 框架
文章目录 1. 简介2. 安装和设置3. 路由和视图4. 自动文档生成5. 数据验证和序列化6. 性能和异步支持结论 在 Python Web 开发领域,FastAPI 和 Flask 是两个备受欢迎的选择。它们都提供了强大的工具和功能,但是在某些方面有所不同。本文将比较 FastAPI…...
E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?
我们在使用Ubuntu系统时经常性使用sudo apt install命令安装所需要的软件库,偶尔会出现如下问题: E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其…...
Spring Boot整合 RabbitMQ
文章目录 一. 引入依赖二. 添加配置三. Work Queue(工作队列模式)声明队列生产者消费者 四. Publish/Subscribe(发布订阅模式)声明队列和交换机生产者消费者 五. Routing(路由模式)声明队列和交换机生产者消费者 六. Topics(通配符模式)声明队列和交换机生产者消费者 一. 引入依…...
Spring Boot 进阶指南:深入核心与实战技巧
当你掌握了 Spring Boot 的基础开发流程后,可以进一步学习其高级功能和优化技巧,以便在复杂场景中高效开发和维护应用。本篇博客将带你深入探讨 Spring Boot 的核心机制,覆盖配置管理、高级特性以及性能优化等内容。 1. 深入理解 Spring Boot…...
淘宝详情网页爬虫:技术解析与实战指南
引言 淘宝作为中国最大的电商平台之一,拥有海量的商品数据。对于开发者来说,获取淘宝商品详情接口是一个常见的需求。本文将介绍如何使用Python编写爬虫,获取淘宝商品详情信息,并探讨在实际应用中可能遇到的挑战与解决方案。 环…...
远程桌面防护的几种方式及优缺点分析
远程桌面登录是管理服务器最主要的方式,于是很多不法分子打起了远程桌面的歪心思。他们采用暴力破解或撞库的方式破解系统密码,悄悄潜入服务器而管理员不自知。 同时远程桌面服务中的远程代码执行漏洞也严重威胁着服务器的安全,攻击者可以利…...
WordPress后门插件Query Console 未授权RCE漏洞复现(CVE-2024-50498)
0x01 产品描述: WP Query Console是一个为...
机器学习经典算法
机器学习经典算法学习和分享。 k近邻算法 线性回归 梯度下降法 PCA主成分分析法 多项式回归 逻辑回归 支撑向量机SVM 决策树 随机森林 评价分类指标...
Mac/Windows端长期破解myBase8方法(无需安装火绒)
提醒 不管哪个端,都需要先退出myBase。 Mac 进入用户根目录/Users/c0ny100,即下边是Macintosh HD > 用户 > [你的用户名]这个界面然后按ShiftCommond.,显示隐藏文件。找到.Mybase8.ini文件 打开.Mybase8.ini文件,删除Fir…...
数据结构:原地移除所有数值等于 val 的元素,删除排序数组中的重复项,数组形式的整数加法
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> 给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素。 要求时间复杂度为O(N),空间复杂度为O(1)。 int removeElement(int* nums, int numsSize, int val) { int sc…...
python3 re正则入门
Python 中的 re 模块是处理正则表达式的标准库,可以用来匹配字符串模式、提取子字符串、替换文本等。以下是 re 模块的基本用法和常见正则表达式模式入门。 1. 导入模块 在使用正则表达式之前,需要导入 re 模块: import re2. 常用函数 1&a…...
一个用于 SMB/CIFS 网络的 Java 库-JCIFS
1.引言 在网络通信中,服务器消息块(SMB)协议在计算机之间实现文件共享和通信方面发挥着重要作用。对于 Java 开发者来说,由于缺乏对该协议的内置支持,使用 SMB 可能会面临挑战。这时,JCIFS(Jav…...
AI 编程入门:理解核心算法与数据结构基础
在踏上人工智能(AI)编程的奇妙之旅时,掌握核心算法与数据结构基础就像是为自己打造了一把开启知识宝库的万能钥匙。这些基础元素不仅是构建智能系统的基石,更是理解AI如何学习、推理和决策的关键所在。 一、线性回归:从数据中探寻线性关系的基础算法 线性回归是AI编程中…...
js:v-for循环中我希望再次循环七张图片,需要在v-for中嵌套一个v-for还是?
问: div classxxxx v-for(item,index) in data :keyindex div classimgDiv div classimgDivBox /div /div .imgDivBox { .background-img(/assets/images/top_01.png) } 这是现在设置的图片,但是现在我希望遍历一个数组然后遍历top01-top07&…...
【问题记录】07 MAC电脑,使用FileZilla(SFTP)连接堡垒机不成功
项目场景: 使用MAC电脑,以子账号(非root)的形式登录,连接堡垒机CLB(传统型负载均衡),使用FileZilla(SFTP)进行FTP文件传输。 问题描述: MAC电脑…...
Spring Security授权案例集合
目录 授权前置内容权限表的设计建表和相关说明 用户权限配置内部关键类GrantedAuthority和SimpleGrantedAuthority关键类使用示例 资源访问控制方法一、配置类设置访问控制方法二、注解类设置访问控制(优选) 权限不足的处理方法 授权 前置内容 描述&am…...
自动化中关于文本的xpath定位
selenium中://*[text()内容] appium中://*[text热门] 如果是网页端元素,可以打开console,编写 $x("//div[1]") 判断自己写的xpath是否正确; 如果是appium,settings里面PLugins,下载XPathViewXS…...
数据结构 -- #栈和队列的定义和基本实现
文章目录 栈和队列的基本概念栈栈的顺序存储实现栈的链式存储实现(不带头结点) 队列队列的顺序存储实现队列的链式存储实现(带头结点)入队图解出队图解 总结 若没有相关知识基础,可以先看看下面文章哦🤗👇 线性表 栈和队列的基本概念 栈 栈…...
共享GitLab中CICD自动生成的软件包
0 Preface/Foreword 1 分享软件包地址 为了方便给接收对象方便下载固件,在下载固件时候,而无需打开网页,直接输入地址,弹出的对话框是将固件另存为。 或者进入CICD页面,找到job,在Download的标签上单击右键…...
JCR一区牛顿-拉夫逊优化算法+分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测
JCR一区牛顿-拉夫逊优化算法分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测 目录 JCR一区牛顿-拉夫逊优化算法分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.中科院…...