垃圾收费站
使用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…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...