使用 ajax 实现文件上传

ajax 文件上传主要用到了 FormData,其 API 使用教程如下:https://developer.mozilla.org/zh-CN/docs/Web/API/FormDatahtml<input type="file" name="fileName1" id="fileName1"/><input type="button" onclick="sendToUser()" id="sendToUser" value=" 提交 " />js function sendToUser(){ // 在这里进行 ajax 文件上传 用户的信息 var $file1 = $("input[name='fileName1']").val();// 用户文件内容 ( 文件) // 判断文件是否为空 if ($file1 == "") {alert(" 请选择上传的目标文件! ") return false; } // 判断文件类型, 我这里根据业务需求判断的是 Excel 文件 var fileName1 = $file1.substring($file1.lastIndexOf(".") + 1).toLowerCase(); if(fileName1 != "xls" && fileName1 !="xlsx"){alert(" 请选择 Execl 文件!"); return false; } // 判断文件大小 var size1 = $("input[name='fileName1']")[0].files[0].size; if (size1>104857600) {alert(" 上传文件不能大于 100M!"); return false; } boo1 = true; var type = "file"; var formData = new FormData();// 这里需要实例化一个 FormData 来进行文件上传 formData.append(type,$("#fileName1")[0].files[0]); // 多文件上传在这里继续 append //eg : //formData.append(type,$("#fileName1")[0].files[0]); $.ajax({ type : "post", url : "uploadToFile", data : formData, processData : false, contentType : false, success : function(data){if (data=="error") {alert(" 文件提交失败!"); }else{$("input[name='userUrl']").val(data); alert(" 文件上传成功!"); }} }); } 重点最后一段代码即可

input[type=file] 上传按钮隐藏“未选择任何文件”

1、关联调用,隐藏上传框 <button onclick="chooseFile.click()"> 上传文件 </button><input type="file" id="chooseFile" style="display:none;"> 参考 https://blog.csdn.net/qq_28306215/article/details/853229442、使用 label for 指定标签 css.upload_bp input[type='file']{display: none;}.loadbp{ padding: 0 30px; height: 40px; border: 1px solid #dd5923; color: #dd5923; font-size: 16px; display: flex; align-items: center; box-sizing: border-box;}.loadbpsuccess{ height: 40px; background: #f5f7f9; border-radius: 2px; font-size: 16px; line-height: 40px; padding: 0 30px; color: #262626; letter-spacing: 0; text-align: center; margin-left: 15px; box-sizing: border-box; position: relative;}.loadbpsuccess span{ font-size: 20px; color: #000; position: absolute; top: -10px; right: 2px;}html<div style="display:flex;align-items: center;"> <label class="upload_bp" for="fileinp"> <input type="file" id="fileinp"> <p class="loadbp"> 上传附件 </p> </label> <p class="loadbpsuccess"> 附件 1.pdf <span>×</span></p> </div> 参考:https://blog.csdn.net/Dilemma_me/article/details/100120542

Windows 系统美化仿 Mac OS 系统软件与 win11 壁纸

第一款:MyDockFinderhttps://www.mydockfinder.com/ 第二款:bitdockhttp://www.bitdock.cn/ 个人推荐第一款 MyDockFinder 以下顺便分享一波 Windows11 壁纸,刚好可以与 mac 风格匹配: 下载:https://hik.lanzoui.com/iUxPaqplboh

Windows 系统美化仿 Mac OS 系统软件与 win11 壁纸

小米手环 6 太空人液晶表盘下载

小米 6 液晶表盘以及下载链接下载:https://amazfitwatchfaces.com/mi-band-6/view/393上述可能有点问题,太空人有拖影,可下载这款,记得解压后使用:https://hik.lanzoui.com/b010k31ja 密码:8k09若不知道怎么安装 bin 文件可参考前贴:小米手环增强工具 Notify & Fitness for Mi Band 下载 小米手环更换自定义表盘教程下载:https://amazfitwatchfaces.com/mi-band-6/view/382下载:https://amazfitwatchfaces.com/mi-band-6/view/291下载:https://amazfitwatchfaces.com/mi-band-6/view/4下载:https://amazfitwatchfaces.com/mi-band-6/view/577

小米手环 6 太空人液晶表盘下载

Windows11 预览版下载 win10 网盘下载

win11 将带来全新的开始菜单、操作中心、任务栏、上下文菜单、弹出窗口等 UI、视觉风格上的调整以及大规模的调度器更新。百度网盘下载https://pan.baidu.com/s/1iI7-ikbG7FwLK7L0r_B15g提取码:7bpv阿里云盘下载 分享码(需油猴脚本):aliyunpan://Windows 11.zip|FDA28083548E3FAB317DA8C9D5334C8552FD79C4|4723533239|application/oct-stream

Windows11 预览版下载 win10 网盘下载

js 解析 Markdown 文件并在前端显示

需要 js:1、jquery.min2、marked.min.js 可点击下载 js:https://hik.lanzoui.com/iBqQeq7hlta 代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>README</title> <link type="text/css" rel="stylesheet" href="css/markdown.css"> <script src="js/jquery-1.9.1.min.js"></script> <script src="js/marked.min.js"></script></head><body> <div id="content" class="markdown-body"></div></body><script> $(document).ready(function(){ // 读取 md 文件 显示 $.ajax({ url: "README.md",//md 文件位置 type: "GET",// 请求方式为 get dataType: "text", // 返回数据格式为 text async: false, success: function (data) {// 请求成功完成后要执行的方法 $("#content").html(marked(data)); $('a').attr("target","_blank"); } }) })</script></html>

哔哩哔哩新开软件应用专区

以前软件评测类或网站类视频投稿都没分区选,现在新增软件分类,选择路径为:科技 -> 软件应用(说明为软件、网站相关皆可)

哔哩哔哩新开软件应用专区

前端解析 Excel 文件 -xlsx.core.min.js 使用

需要的 JS:https://code.jquery.com/jquery-3.1.1.min.jshttps://cdn.bootcss.com/xlsx/0.12.7/xlsx.core.min.js 读取 Excel 代码示例:<!DOCTYPE html><html><head> <title></title></head><body><input type="file" id="excel-file"></body><script type="text/javascript" src="xlsx.core.min.js"></script><script src="https://code.jquery.com/jquery-3.1.1.min.js"></script><script> $('#excel-file').change(function (e) { var files = e.target.files; var fileReader = new FileReader(); fileReader.onload = function (ev) { try { var data = ev.target.result, workbook = XLSX.read(data, {type: 'binary'}), // 以二进制流方式读取得到整份 excel 表格对象 persons = []; // 存储获取到的数据} catch (e) {console.log(' 文件类型不正确 '); return; } // 遍历每张表读取 for (var sheet in workbook.Sheets) {if (workbook.Sheets.hasOwnProperty(sheet)) {var fromTo = workbook.Sheets[sheet]['!ref']; console.log(fromTo); var datas = workbook.Sheets[sheet]; console.log(datas); // 处理不规范的数据 没有可以省略 for (var nums in datas) {console.log(nums); var num = nums.replace(/[^0-9]/ig, ""); console.log(num); var row_data = new Array(); row_data[0] = "A" + String(num); row_data[1] = "B" + String(num); row_data[2] = "C" + String(num); row_data[3] = "D" + String(num); row_data[4] = "E" + String(num); row_data[5] = "F" + String(num); row_data[6] = "G" + String(num); row_data[7] = "H" + String(num); row_data[8] = "I" + String(num); row_data[9] = "J" + String(num); row_data[10] = "K" + String(num); row_data[11] = "L" + String(num); row_data[12] = "M" + String(num); var arry_row = new Array(); var count = 0; for (var i of row_data) {if (datas[i]) {arry_row[count] = datas[i].v.replace(/\s*/g,""); count += 1; } } // 找到正确数据的列名 if (arry_row.indexOf(" 单位 ") < 0 || arry_row.indexOf(" 数量 ") < 0) {for (var i = 0; i < row_data.length; i++) {delete datas[row_data[i]]; } } else { // 修改读取范围 datas["!ref"] = row_data[0] + ":" + datas['!ref'].split(':')[1]; break; } } persons = persons.concat(XLSX.utils.sheet_to_json(datas)); break; // 只读了第一张表 } } console.log(persons); }; // 以二进制方式打开文件 fileReader.readAsBinaryString(files[0]); });</script></html>

jQuery 点击按钮弹出窗口播放视频

jQuery 点击按钮弹出窗口播放视频。点击图片区域或者按钮即可弹出一个窗口,然后在窗口进行视频播放。可以将 class="videolist" vpath="./img/Estorage.png" ipath="http://127.0.0.1:8848/page/abc.mp4" 加在按钮或 a 标签上实现任意元素点击播放。<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title> 点击播放视频 </title> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <style type="text/css"> body {background-color: #0964} .videolist { position: relative; float: left; width: 540px; height: 300px; margin-left: 230px; } .videolist:hover {cursor: pointer;} .videoed { width: 50px; height: 50px; position: absolute; left: 45%; top: 40%; z-index: 99; border-radius: 100%; } .videos { display: none; border: 1px solid #080808; position: fixed; left: 50%; top: 50%; margin-left: -320px; margin-top: -210px; z-index: 100; width: 640px; height: 360px; } .vclose { position: absolute; right: 1%; top: 1%; border-radius: 100%; cursor: pointer; } .con { height: 430px; width: 1000px; margin: 0 auto; } .masklayer { position: fixed; display: none; width: 100%; height: 1000px; top: 0px; left: 0px; background-color: rgba(0, 0, 0, 0.8); z-index: 1000; -webkit-user-select: none; -ms-user-select: none; } </style> </head> <body> <div class="video"> <div class="con" style="margin-top: 100px"> <div class="videolist" vpath="./img/Estorage.png" ipath="http://127.0.0.1:8848/page/abc.mp4"> <img src="./img/Estorage.png" width="540px" height="300px" /> <!-- 背景图片 --> <img src="./img/circle.png" class="videoed" /> <!-- 播放按钮 --> </div> <div class="masklayer"> <!-- 遮罩层 --> <div class="videos"></div> <!-- 存放视频 --> </div> </div> </div> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script> $('.videolist').each(function() { // 遍历视频列表 $(this).click(function() { // 视频被点击后执行 var img = $(this).attr('vpath'); // 获取视频预览图 var video = $(this).attr('ipath'); // 获取视频路径 $('.videos').html("<video id=\"video\" poster='" + img + "' style='width: 640px' src='" + video + "' preload=\"auto\" controls=\"controls\" autoplay=\"autoplay\"></video><img onClick=\"close1()\" class=\"vclose\" src=\"./img/close.png\" width=\"25\" height=\"25\"/>"); $('.videos').show(); // 视频窗口弹出 $('.masklayer').show(); // 遮罩层弹出 $('body').css('overflow', 'hidden'); // 禁止滚动 winHeight = document.body.clientHeight; $(".masklayer").height(winHeight + 5000 + "px"); }); }); function close1() {var v = document.getElementById('video'); // 获取视频节点 $('.videos').hide(); // 点击关闭 $('.masklayer').hide(); // 遮罩层隐藏 v.pause(); // 停止 $('.videos').html(); $('body').css('overflow', 'auto'); } </script> </body></html>

jQuery 点击按钮弹出窗口播放视频

Nginx+Keepalived 实现 Nginx 高可用离线安装教程

下文假定 192.168.1.100、192.168.1.101 为两台 keepalived+Nginx 服务器,192.168.1.102 为虚拟 IP(即 VIP)。在架构设计中,可以利用 Nginx 反向代理和负载均衡实现后端应用的高可用性,同时我们还需要考虑 Nginx 的单点故障。因此可改成多 Nginx 服务,每台 Nginx 服务器上用 keepalived 监测 Nginx 是否正常,不正常会重新启动 Nginx,启动不成功会自己杀掉自己由另一台 keepalived 服务器接管,真正做到架构高可用性。其实并非两台机器 100、101 都绑定了 VIP,两台 keepalived 配置有主备优先级配置,优先级高的会拿到 VIP,例如 100 拿到 VIP 后,那访问 102 就是实际访问的是 100 上的 Nginx,当把 100 上 Keepalived 进程关闭,101 会得到 VIP,这是访问 VIP 就是访问 101 上的 Nginx 了。安装 keepalived 依赖的包 若在步骤二编译安装 keepalived 时候提示缺 libnl/libnl3 dev,需上传依赖至文件夹 /opt/rpm:libnl-1.1.4-3.el7.x86_64.rpm、libnl-devel-1.1.4-3.el7.x86_64.rpmx86_64 下载:https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/cd /opt/rpmrpm -ivh *.rpm --nodeps --force执行上述命令进行安装依赖。对于安装过程中出现的 undefined reference to OPENSSL_init_ssl 报错需升级 openssl 依赖上传新版本依赖 openssl-devel-1.0.2k-19.el7.x86_64.rpm 至服务器,并执行安装:rpm -Uvh openssl-devel-1.0.2k-19.el7.x86_64.rpm #安装新版本依赖rpm -qa|grep openssl #查看依赖,确认已安装新版依赖亦可使用 rpm - e 卸载旧依赖再用 rpm -ivh 安装新版依赖。编译安装 keepalived将 keepalived 的安装包 上传到 /usr/local/software 目录下cd /usr/local/softwaretar -zxvf keepalived-2.2.0.tar.gzcd keepalived-2.2.0./configure --prefix=/usr/local/keepalivedmake && make install将 keepalived 安装成 Linux 系统服务 安装完成之后, 需要做一些工作复制默认配置文件到 默认路径mkdir /etc/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/cp /usr/local/keepalived/sbin/keepalived /usr/sbin/cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/cd /usr/local/software/keepalived-2.2.0cp ./keepalived/etc/init.d/keepalived /etc/init.d/chmod 755 /etc/init.d/keepalived编写 nginx 检测脚本 新建脚本文件vi /etc/keepalived/nginx_check.sh内容如下:#!/bin/bashA=`ps -C nginx –no-header |wc -l`if [$A -eq 0];then /usr/local/nginx/sbin/nginx sleep 2 if [`ps -C nginx --no-header |wc -l` -eq 0];then killall keepalived fifi赋予执行权限chmod +x /etc/keepalived/nginx_check.sh修改 keepalived 的 Master 配置文件 vi /etc/keepalived/keepalived.conf 内容如下:# 全局配置,配置收件人 global_defs { notification_email { ## 通知机制,收件人 10000@qq.com } notification_email_from keepalived@domain.com #### 发件人 smtp_server 192.168.1.100 ## 发件服务器 smtp_connect_timeout 30 ## 服务器连接超时时间 router_id LVS_DEVEL ## 路由器标志 } # 集群资源监控,组合 track_script 进行 vrrp_script check_haproxy { script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径 interval 2 #检测时间间隔 weight -20 #条件成立 权重减 20} vrrp_instance HAPROXY_HA { # 设置当前主机为主节点,如果是备用节点,则设置为 BACKUP state MASTER # 指定 HA 监测网络接口,可以用 ifconfig 查看来决定设置哪一个 interface eth0 # 虚拟路由标识,同一个 VRRP 实例要使用同一个标识,主备机 virtual_router_id 80 # 因为当前环境中 VRRP 组播有问题,改为使用单播发送 VRRP 报文 如果 VRRP 组播没问题,以下这块的内容可以注释掉。 # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了 MASTER,并且绑定了 VIP # 主节点时,内容为: #unicast_src_ip 192.168.1.100 # unicast_peer { # 192.168.1.101 #} # 设置优先级,确保主节点的优先级高过备用节点 priority 100 # 用于设定主备节点间同步检查时间间隔 advert_int 2 # 设置高可用集群中不抢占功能,在主机 down 后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患 #nopreempt # 设置主备节点间的通信验证类型及密码,同一个 VRRP 实例中需一致 authentication { auth_type PASS auth_pass 1234 } # 集群资源监控,组合 vrrp_script 进行 track_script {check_haproxy} # 设置虚拟 IP 地址,当 keepalived 状态切换为 MASTER 时,此 IP 会自动添加到系统中 # 当状态切换到 BACKUP 时,此 IP 会自动从系统中删除 # 可以通过命令 ip add 查看切换后的状态 virtual_ipaddress {192.168.1.102 #虚拟 ip 配置完之后就用它访问} }修改 keepalived 的 BACKUP 配置文件# 全局配置,配置收件人 global_defs { notification_email { ## 通知机制,收件人 10000@qq.com } notification_email_from keepalived@domain.com #### 发件人 smtp_server 192.168.1.100 ## 发件服务器 smtp_connect_timeout 30 ## 服务器连接超时时间 router_id LVS_DEVEL ## 路由器标志 } # 集群资源监控,组合 track_script 进行 vrrp_script check_haproxy { script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径 interval 2 #检测时间间隔 weight -20 #条件成立 权重减 20}vrrp_instance HAPROXY_HA { # 设置当前主机为主节点,如果是备用节点,则设置为 BACKUP state BACKUP # 指定 HA 监测网络接口,可以用 ifconfig 查看来决定设置哪一个 interface eth0 # 虚拟路由标识,同一个 VRRP 实例要使用同一个标识,主备机 virtual_router_id 80 # 因为当前环境中 VRRP 组播有问题,改为使用单播发送 VRRP 报文 如果 VRRP 组播没问题,以下这块的内容可以注释掉。 # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了 MASTER,并且绑定了 VIP # 主节点时,内容为: #unicast_src_ip 192.168.1.101 # unicast_peer { # 192.168.1.100 #} # 设置优先级,确保主节点的优先级高过备用节点 priority 90 # 用于设定主备节点间同步检查时间间隔 advert_int 2 # 设置高可用集群中不抢占功能,在主机 down 后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患 nopreempt # 设置主备节点间的通信验证类型及密码,同一个 VRRP 实例中需一致 authentication { auth_type PASS auth_pass 1234 } # 集群资源监控,组合 vrrp_script 进行 track_script {check_haproxy} # 设置虚拟 IP 地址,当 keepalived 状态切换为 MASTER 时,此 IP 会自动添加到系统中 # 当状态切换到 BACKUP 时,此 IP 会自动从系统中删除 # 可以通过命令 ip add 查看切换后的状态 virtual_ipaddress {192.168.1.102 #虚拟 ip 配置完之后就用它访问} }测试高可用 第一步:启动 nginx 和 keepalived 服务 启动 nginx:# 启动/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf/usr/local/nginx/sbin/nginx#停止/usr/local/nginx/sbin/nginx -s stopkillall nginx#重载/usr/local/nginx/sbin/nginx -s reload启动 keepalived:# 启动systemctl start keepalived#停止systemctl stop keepalivedkillall keepalived#重启systemctl restart keepalived启动之后, 使用ip addr(centos6 之前版本使用 ifconfig) 其中一台服务器会出现虚拟 ip 绑定到网卡第二步:通过虚拟 ip 访问服务 通过虚拟 ip 访问服务, 会跳转到 nginx 的服务上。第三步:杀掉一台服务器上的 keepalived 再次访问服务 注意:杀掉 nginx 是不行的, 因为上面的脚本 是检测到 nginx 宕机 会重启 nginx 的,例如这里杀死 192.168.1.101 上的 keepalived 进程。第四步:再次访问服务 会发现虚拟 ip 从 192.168.1.101 上取消了, 重新绑定到 192.168.1.100 上了。查看日志 tail -f /var/log/messages 查询安装位置find / -name svnservewhereis svnserve