垃圾收费站
使用form-data传递数组和x-www-form-urlencoded传递的区别
项目场景:
我将后端接口的一个接收参数设计成了数组,然后前端使用form-data去传递问题描述
访问的时候出现了问题,后端接收到的数组多出了一层中括号,也就是被两层中括号包裹,获取数组的值的时候,头尾都会多半边中括号
原因分析:
反复调试了一下,确定是前端传完,后端接收时就出现的问题,猜想会不会是form-data这个传参方式不对,改成了x-www-form-urlencoded,就不会有了。form-data和x-www-form-urlencoded的区别主要体现在以下三个方面:
编码方式:x-www-form-urlencoded将表单内的数据转换为键值对,如name=java&age=23,而form-data则将表单数据处理为一条消息,以标签为单元,用分隔符分开,既可以上传键值对,也可以上传文件。
传输内容:x-www-form-urlencoded只能上传键值对,并且键值对都是间隔分开的,而form-data既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息。
使用情况:x-www-form-urlencoded常用于表单请求,而form-data则多用于HTTP协议的客户端向服务器端发送数据。
解决方案:
不使用数组接收参数,使用字符串约定用‘ ,’进行分隔,到时候在后端进行数据处理就行了
FFmpeg截取一个视频中的一张图
String videoPath = "D:\\班迪\\bandicam 2023-09-12 13-43-08-842.mp4";// 输入视频文件路径
String thumbnailPath = "D:\\班迪\\bandicam 2023-09-12 13-43-08-842.mp4.jpg";// 输出图片文件路径
// 构建FFmpeg命令
ProcessBuilder processBuilder = new ProcessBuilder("ffmpeg", "-i", videoPath, "-ss", "00:00:01", "-vframes", "1", thumbnailPath);
try {
// 执行FFmpeg命令
Process process = processBuilder.start();
process.waitFor();
System.out.println("截图成功");
} catch (Exception e) {
e.printStackTrace();
}
提示
在项目中引入这种插件的时候,需要考虑的东西很多,是否有引入这个插件的必要,它能给项目带来什么,会不会影响原有项目的稳定性,社区是否活跃,技术是否稳定等等。
在经过一系列考虑以后,才是将这个插件开始安装在服务器上。
安装前的准备工作
首先需要在本地,或者自己个人的服务器上先进行安装使用,
并整理安装文档,
对于出现的问题要有解决方案,将一切可能出现的问题解决在准备阶段,
最后在正式的机器上进行部署的时候也需要对具体的安装位置有对应的考量
最后安装完成后要注意是否影响其他项目
接收压缩包文件直接处理的demo
package com.hbmeta.controller;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.charset.Charset;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
* @author Chromer
* @title
* @description
* @date 2023/10/11 9:02
*/
@CrossOrigin
@Slf4j
@Controller
public class TestController {
@ResponseBody
@RequestMapping(value = "/test")
public String test(MultipartFile file) throws IOException {
if (file.isEmpty()){
return "文件为空";
}
//获取文件输入流
ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream(), Charset.forName("GBK"));
//定义ZipEntry置为null,避免由于重复调用zipInputStream.getNextEntry造成的不必要的问题
ZipEntry ze;
List<List<Object>> list;
StringBuffer a = new StringBuffer();
while ((ze = zipInputStream.getNextEntry()) != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (!ze.isDirectory() && ze.toString().endsWith("txt")) {
System.out.println(ze.getName());
//读取
byte[] buffer = new byte[1024];
int len;
while ((len = zipInputStream.read(buffer)) > -1) {
baos.write(buffer, 0, len);
}
System.out.println(len);
baos.flush();
InputStream stream = new ByteArrayInputStream(baos.toByteArray());
//根据txt输入流读取txt中的数据
InputStreamReader reader = new InputStreamReader(stream);
BufferedReader buffReader = new BufferedReader(reader);
String strTmp = "";
while((strTmp = buffReader.readLine())!=null){
a.append(strTmp);
System.out.println(strTmp);
}
}
}
//关闭流
file.getInputStream().close();
zipInputStream.closeEntry();
return a.toString();
}
}
1、首先得到这个文件
使用if进行判断是否接收到这个文件
2、获取文件的输入流
这里使用zip的输入流 ,这里必须设置编码格式
ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream(), Charset.forName("GBK"));
3、按字节大小读取就行了
4、最后返回一个字符串类型的数据,根据业务需求进行处理就可以了
Linux目录结构
bin目录:直接可以执行的常用命令
本身是一个文件夹的链接,实际指向的是user下的bin目录
sbin目录:系统级的系统管理命令,也是指向user目录下的sbin目录
lib目录(lib64):库目录,系统和应用文件所需要的共享库文件,等同于windows下的system文件。也是链接到user下的lib(lib64)库
boot:挂载引导分区里面存放的一些东西,单独划分分区
dev:设备目录,管理我们所有的设备
etc:系统管理所需要的配置文件,比如数据库安装完了,对应的配置文件就会放到这
home:在linux中每一个用户都有一个自己的主目录,包含普通用户的文件夹,注意:不含root用户的主文件夹
root:root用户的主文件夹
opt:可选目录,给第三方软件包划分的目录
media:可以识别一些可移动媒体设备,相当于可移动媒体设备挂载点,如:U盘,光驱
mnt:也是一个挂载点,相当于media,移动化设备的另一个挂载点
proc:进程目录
run:运行目录,系统运行以来的临时信息,系统重启就被干掉
srv:跟系统服务相关的文件
sys:存放的是系统硬件信息的相关文件
tmp:临时目录,可以操作
user:应用程序和用户相关的文件
var:可变目录,经常被修改的目录,一般放置日志什么的。
一般常用的是bin和etc目录,bin是使用命令,etc是修改配置文件
一般不建议改动的目录boot、dev、media、proc、srv、sys
Calendar对象获取当前周的bug
项目场景:
双周项目管理,需要获取当前周为一年之中的第几周,原先的代码是用Calendar对象,先用setTime()把当前时间传入,再用get(3)获取一年中的第几周
问题描述
实际发现会比真实的周少一点,且时间是周日到周六为一周
原因分析:
经排除发现,这个api的计算规则是有一定问题的。
首先它是以星期日为一周的开始,星期六为一周的结束。
解决方案:
获取当前年1号的星期几,再去用当前时间+星期几-1day得到一个时间,将这个时间传入setTime()中,get(3)得到的就是正常的当前周了
获取微信小程序二维码的bug
项目场景:
获取微信小程序二维码的bug,原来测试一直是没问题的,上线后也没啥问题,这次突然爆错
问题描述
access_token已失效或已过期
{"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest, could get access_token by getStableAccessToken, more details at https://mmbizurl.cn/s/JtxxFh33r rid: 64f87aca-59cf3102-17206889"}
原因分析:
重新获取access_key,正常返回图片二进制文件,随后在测试站和正式站分别测试,测试站生成新的access_key,看返回数据正常,正式站也生成新的access_key,数据正常,等待一段时间(1分钟左右,如果期间一直ping,旧的access_key也可能不失效),再分别访问正式站和测试站,其中测试站的失效,也就是生成新的access_key,旧的会失效。
解决方案:
将生成access_key的数据库保持唯一,不要测试站一个,正式站一个。
相关文章:

垃圾收费站
使用form-data传递数组和x-www-form-urlencoded传递的区别 项目场景: 我将后端接口的一个接收参数设计成了数组,然后前端使用form-data去传递 问题描述 访问的时候出现了问题,后端接收到的数组多出了一层中括号,也就是被两层中括号…...

ElasticSearch 统计搜索热词
实际开发中,我们会统计某个模块下的搜索热词,这个在elasticsearch中特别好用,也比较简单, 使用可以使用 "terms aggregation" 来统计热词 terms 是代表的elasticSerach中的Term Query,统计的就是Term Query, Term Query是一种最基本的查询方式,它用于在Ela…...

el-table(vue2中)滚动条被固定列盖住
一、项目场景: vue2 el-table 二、问题描述 1、现场图片: 2、全局css环境配置了滚动条高度为6px /* 全局滚动条配置 */ ::-webkit-scrollbar {width: 6px;height: 6px; }::-webkit-scrollbar-track {background-color: #f1f1f1; }::-webkit-scrollbar-…...

两数之和(C++解法)
题目 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会…...
SCNet:自校正卷积网络(附代码)
论文地址:https://mftp.mmcheng.net/Papers/20cvprSCNet.pdf 代码地址:https://github.com/MCG-NKU/SCNet 1.是什么? SCNet是一种卷积神经网络,它使用自校准卷积(Self-Calibrated Convolutions)来增强子…...

【PG】PostgreSQL客户端认证pg_hba.conf文件
目录 文件格式 连接类型(TYPE) 数据库(database) 用户(user) 连接地址(address) 格式 IPv4 IPv6 字符 主机名 主机名后缀 IP-address/IP-mask auth-method trust reject scram-sha-256 md5 password gss sspi …...

信创优选,国产开源。Solon v2.5.11 发布
Solon 是什么框架? Java 生态级应用开发框架。从零开始构建,有自己的标准规范与开放生态(历时五年,具备全球第二级别的生态规模)。与其他框架相比,解决了两个重要的痛点:启动慢,费内…...

180.188.16.1网站高并发,导致网站卡了,有什么方案处理?
处理网站高并发需要考虑多方面的因素,以下是一些解决方法: 增加服务器硬件:增加服务器内存、CPU、带宽等硬件资源,以提高服务器的处理能力,从而增强网站处理请求的能力。 使用CDN:将网站的静态资源&#x…...

P1077 [NOIP2012 普及组] 摆花 题解
文章目录 题目描述输入格式输出格式样例样例输入样例输出 数据范围与提示思路与部分实现完整代码 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m m m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的…...

kubernetes源码阅读与实战(3)
kubernetes源码二次开发系列 1、k8s二次开发之kubernetes开发概念 2、k8s二次开发之自定义的example展示 3、k8s二次开发之如何扩展kubernetes系统 4、k8s二次开发之kubernetes控制器的控制循环 5、k8s二次开发之kubernetes控制器的watch事件及event对象 6、k8s二次开发之…...

ESP8266模块常规调试过程讲解
ESP8266-WIFI模块串口调试过程讲解 一、ESP8266介绍 ESP8266是一个高度集成的无线SoC(System on a Chip)模块,基于ESP8266芯片,集成了Wi-Fi功能。具有丰富的特性和功能,广泛应用于各种物联网项目中。 ESP8266模块支持802.11b/g/n无线标准,内置TCP/IP协议栈,可以实现串…...

使用onnxruntime推理Bert模型
Bert模型类别:onnx 输入输出数据格式:.npz import onnxruntime import numpy as np import os# 加载 ONNX 模型 ort_session onnxruntime.InferenceSession(bert-base-uncased_final.onnx)# 指定输入文件夹和输出文件夹 input_folder output_folder …...

SQL group by、where和having语句用法
SQL 语句中的 GROUP BY 子句用于将具有相同值的行分组在一起,通常与聚合函数(如 COUNT、SUM、AVG 等)一起使用。WHERE 子句用于筛选符合条件的行。HAVING 子句则在分组后对分组结果进行进一步筛选。 以下是一个使用 SQL 语句中的 GROUP BY、W…...

贝叶斯变分方法:初学者指南--平均场近似
Eric Jang: A Beginners Guide to Variational Methods: Mean-Field Approximation (evjang.com) 一、说明 变分贝叶斯 (VB) 方法是统计机器学习中非常流行的一系列技术。VB 方法允许我们将 统计推断 问题(即,给定另一个随机变量的值来推断随机变量的值&…...

Node学习笔记之user用户API模块
1、获取用户的基本信息 步骤 获取登录会话存储的session中用户的id判断是否获取到id根据用户id查询数据库中的个人信息检查指定 id 的用户是否存在将密码设置为空将数据返回给前端 // 获取用户信息数据 exports.userinfo (req, res) > {(async function () {// 1. 获取…...

智慧公厕:为公众提供全新的公共厕所使用体验
智慧公厕管理系统通过智能化技术的应用,为公众提供了全新的公厕使用体验。不仅仅是一个普通的提供“方便”的公共设施,智慧公厕更融合了精准环境监测、厕位占用监测、设备状态实时监控等功能,同时还提供了自动化清洁、灯光照明、除臭杀菌消毒…...

共谈信创谋发展 | 开源网安主办的信创生态构建沙龙圆满完成
10月26日,由珠海市工业和信息化局、珠海市高新区科技创新和产业发展局指导,珠海华发产业园与开源网安珠海公司等联合主办的“赋能数字转型 提速国产替代”—Uni-Idea信创生态构建沙龙在华发信创产业园成功举办,近百位行业代表参加本次活动&…...

第四章认识Node.js模块化开发
Node.js系统模块 续上一篇文章第三章认识Node.js模块化开发-CSDN博客,这次继续来认识和总结以下node的常用模块开发 Node.js系统模块是指Node.js自带的一些模块,这些模块可以直接在Node.js中使用,无需安装其他包。以下是常用的Node.js系统模块…...

Widget必须在GUI线程中创建
背景:miniblink的vip版本,下载功能是独立线程,我希望在下载后弹出窗口,就在其中创建了QWidget子类对象。然后出现了上面的错误。 解决方法: 使用信号和槽来处理。 具体来讲,在独立线程中创建QObject子类…...

Kubernetes概念及实践
Kubernetes(K8S)中文文档_Kubernetes中文社区 Kubernetes 文档 | Kubernetes K8S 是负责自动化运维管理多个跨机器 Docker 程序的 集群。 kubeadm快速部署K8s集群的工具,如: 创建master node:kubeadm init 将worker node加入到集群中&#x…...

洛谷 B2007 A+B问题 C++代码
目录 题目描述 AC Code 题目描述 AC Code #include<bits/stdc.h> using namespace std; typedef long long ll; int main() { int a,b;cin>>a>>b;cout<<ab<<endl;return 0; }...

Git基础 | 原理、配置、用法、分支 合并
目录 1 git初步了解 1.1 git的安装 1.2 git原理模型 1.3 git基础配置 1.4 git基础用法 1 将文件加入暂存区 2 查看当前的git仓库状态 3 删除文件 4 commit 将暂存区文件加入本地git版本仓库 5 查看提交历史 更改 2 分支 2.1 创建分支 2.2 查看分支 2.3 切换分支 …...

刀具磨损状态识别(Python代码,MSCNN_LSTM_Attention模型,初期磨损、正常磨损和急剧磨损分类,解压缩直接运行)
1.运行效果:刀具磨损状态识别(Python代码,MSCNN_LSTM_Attention模型,初期磨损、正常磨损和急剧磨损)_哔哩哔哩_bilibili 环境库: NumPy 版本: 1.19.4 Pandas 版本: 0.23.4 Matplotlib 版本: 2.2.3 Keras …...

web:[网鼎杯 2020 青龙组]AreUSerialz
题目 点进题目发现 需要进行代码审计 function __destruct() {if($this->op "2")$this->op "1";$this->content "";$this->process();}这里有__destruct()函数,在对象销毁时自动调用,根据$op属性的值进行…...

【Python机器学习】零基础掌握PolynomialCountSketch内核近似特征
面临挑战的机器学习模型:如何提高准确性? 在实际应用中,机器学习模型常常面临一个问题:如何在保持模型复杂性不变的情况下,提高模型的准确性?特别是在处理高维数据集时,这个问题尤为突出。这里,有一种名为“核方法”的技术可以解决这个问题,但通常会增加计算成本。那…...

【Linux】深入理解系统文件操作(1w字超详解)
1.系统下的文件操作: ❓是不是只有C\C有文件操作呢?💡Python、Java、PHP、go也有,他们的文件操作的方法是不一样的啊 1.1对于文件操作的思考: 我们之前就说过了:文件内容属性 针对文件的操作就变成了对…...

echarts柱状图和折线图双图表配置项
{tooltip: {trigger: axis,axisPointer: { // 坐标轴指示器,坐标轴触发有效type: cross // 默认为直线,可选为:line | shadow}},legend: {data: [新增客户数, 新增客户两年内回款情况],type: scroll,selectedMode: false // 控制是否可以通过…...

【LVS实战】02 搭建一个LVS-NAT实验
一、网络结构 用虚拟机搭建如下的几台机器,并配置如下的ip 关于虚拟机网卡和网络的配置,可以参考 iptables章节,05节:网络转发实验 主机A模拟外网的机器 B为负载均衡的机器 C和D为 RealServer 二、C和D主机的网关设置 C和D机…...

2023.10.26-SQL测试题
employee表: department表: job表: location表: 题目及答案: -- (1).查询工资大于一万的员工的姓名(first_name与last_name用“.”进行连接)和工资-- select CONCAT(first_name,.,last_name) as 姓名 ,salary -…...

JVM虚拟机:从结构到指令让你对栈有足够的认识
本文重点 在前面的课程中,我们学习了运行时数据区的大概情况,从本文开始,我们将对一些组件进行详细的介绍,本文我们将学习栈。栈内存主管java的运行,是在线程创建时创建的,它是线程私有的,它的生命周期是跟随线程的生命期,也就是说线程结束栈内存就释放了,对于栈来说…...