垃圾收费站

使用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的数据库保持唯一,不要测试站一个,正式站一个。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/122693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑猪肉经营配送商城小程序商城效果怎样

对产品商家来说&#xff0c;如今线下流量匮乏难以增长&#xff0c;线上已经成为商家们重要的经营渠道&#xff0c;但入驻第三方平台也存在诸多痛点&#xff0c;因此更多企业品牌商家选择自建私域卖货平台完善更多生意。 微信作为私域主阵地&#xff0c;自然是企业们不可错过的…

论文-分布式-并发控制-并发控制问题的解决方案

目录 参考文献 问题 解法与证明 易读版本 参考文献 Dijkstra于1965年发表文章Solution of a Problem in Concurrent Programming Control&#xff0c;引出并发系统下的互斥(mutual exclusion)问题&#xff0c;自此开辟了分布式计算领域Dijkstra在文中给出了基于共享存储原子…

Linux——文件权限属性和权限管理

文件权限属性和权限管理 本章思维导图&#xff1a; 注&#xff1a;本章思维导图对应的Xmid文件和.png文件都以传到“资源” 文章目录 文件权限属性和权限管理1. sudo提权和sudoers文件1.1 sudo提权和成为root的区别 2. 权限2.1 Linux群体2.1.1 为什么要有所属组2.1.2 修改文件…

深入理解Linux网络笔记(五):深度理解本机网络IO

本文为《深入理解Linux网络》学习笔记&#xff0c;使用的Linux源码版本是3.10&#xff0c;网卡驱动默认采用的都是Intel的igb网卡驱动 Linux源码在线阅读&#xff1a;https://elixir.bootlin.com/linux/v3.10/source 4、深度理解本机网络IO 1&#xff09;、跨机网络通信过程 …

【笔录】TVP技术沙龙:寻宝AI时代

目录 引言大模型的应用案例大模型三问模型落地可行性考量维度AIGC的几个可行应用方向AIGC的存储LLM工程应用范式演进LLM编程协作范式变化 引言 大模型是10倍的机会&#xff0c;但并不是平均主义的机会&#xff0c;没有低垂的果实。 企业想在大模型的赛道上跑出成绩&#xff0c;…

光谱图像论文浅读

文章目录 Hyperspectral Image Super-Resolution via Deep Spatiospectral Attention Convolutional Neural Networks Hyperspectral Image Super-Resolution via Deep Spatiospectral Attention Convolutional Neural Networks 通过上采样高光谱保留其光谱特征&#xff0c;采用…

【实用网站分享】

1、PyDebloatX https://pydebloatx.com/pydebloatx 是一种用于 Windows 操作系统的 Python 脚本&#xff0c;用于卸载 Windows 10 系统中的预装应用和系统组件&#xff0c;以便提高系统性能和释放磁盘空间。它是 Debloat Windows 10 脚本的一个分支&#xff0c;但具有更友好和…

WPF:自定义按钮模板

1.WPF:自定义按钮模板 自定义封装的按钮属性可写在<Button.Template>中 Background"{TemplateBinding Background}"中的TemplateBinding代表使用按钮本身所使用的背景颜色 不在样式内修改背景颜色 例如&#xff1a; <Button Width"300" Height&q…

202212 青少年等级考试机器人实操真题三级

202212 青少年等级考试机器人实操真题三级 考试时间&#xff1a;60分钟 总分&#xff1a;100 及格分&#xff1a;60 一、问答题 (共1题&#xff0c;每题100分) 1、实际操作(共1题&#xff0c;共100分) 请考生在实操考试结束前将本题作答程序文件按“说明”要求完成上传。 1. 主…

vscode连接服务器一直retry

解决方法 打开vscode控制面板&#xff0c;输入命令remote-ssh: kill vs code server on host 选择一直连接不上的服务器端口 重新连接

【鸿蒙软件开发】Stage模型开发概述应用/组件级配置

文章目录 前言一、基本概念1.1 UIAbility 组件1.2 ExtensionAbility 组件1.3 Context1.4 AbilityStage1.5 Stage模型开发流程应用组件开发了解进程模型了解线程模型应用配置文件 二、Stage模型应用/组件级配置2.1 为什么需要这个操作2.2 应用包名配置2.3 应用图标和标签配置2.4…

人工智能在疾病治疗中的应用:机遇与挑战

人工智能在疾病治疗中的应用&#xff1a;机遇与挑战 随着人工智能技术的飞速发展&#xff0c;其在诸多领域的应用价值日益显现。本文将探讨人工智能技术在疾病治疗中的应用&#xff0c;包括其背景意义、技术概述、具体应用、发展前景以及总结。 一、背景意义 随着医学技术的…

leetCode 169. 多数元素 + 摩尔投票法

169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 class Solution { publ…

【SPSS】基于RFM+Kmeans聚类的客户分群分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

一文解决:Swagger API 未授权访问漏洞问题

Swagger 是一个用于设计、构建、文档化和使用 RESTful 风格的 Web 服务的开源软件框架。它通过提供一个交互式文档页面&#xff0c;让开发者可以更方便地查看和测试 API 接口。然而&#xff0c;在一些情况下&#xff0c;未经授权的访问可能会导致安全漏洞。本文将介绍如何解决 …

前端技术知识(含八股)总结 - 持续更新中

前端技术知识&#xff08;含八股&#xff09;总结 - 持续更新中 参考文献1.HTML和CSS1.1 语义化标签1.2 CSS 选择器及优先级 / position 定位 / box-sizing 属性 / transition / 继承属性&#xff08;如字体文字类的属性大部分有继承&#xff09;/ 行内元素和块级元素 / html的…

2.MySQL的调控按钮——启动选项和系统变量

2.MySQL的调控按钮——启动选项和系统变量 1.启动选项和配置文件1.1 在命令行上使用选项1.2 配置文件中使用选项1.2.1 配置文件路径1.2.2 配置文件的内容1.2.3 特定 MySQL 版本的专用选项组1.2.4 配置文件的优先级1.2.5 同一个配置文件中多个组的优先级1.2.6 defaults-file 的使…

数据特征工程 | 基于KPCA算法(Python)

当我们处理高维数据时,经常会遇到维度灾难的问题,即许多算法无法有效处理高维数据,且计算不仅变得更加复杂,还存在过拟合和维数诅咒等问题。因此,如何有效地降低数据维度是一个关键问题。 为此,很多学者提出了各种降维算法,其中主成分分析(PCA)是最常见的一种方法。然…

使用Spring Boot限制在一分钟内某个IP只能访问10次

有些时候&#xff0c;为了防止我们上线的网站被攻击&#xff0c;或者被刷取流量&#xff0c;我们会对某一个ip进行限制处理&#xff0c;这篇文章&#xff0c;我们将通过Spring Boot编写一个小案例&#xff0c;来实现在一分钟内同一个IP只能访问10次&#xff0c;当然具体数值&am…

MyBatisPlus创建新的Mapper.xml映射文件而不使用框架自带的?

MyBatisPlus创建新的Mapper.xml映射文件而不使用框架自带的&#xff1f; 以后使用数据库框架的时候可以使用MyBatisPlus而不适用MyBatis&#xff0c;因为MyBatisPlus更为简便&#xff0c;像简单的增删改查操作&#xff0c;在MyBatisPlus中可以直接完成&#xff0c;不用写Mappe…