Http文件上传
方式一:HttpClient
public static String uploadFile(String url, Map<String, FileWrapper> fileParam, Map<String,String> otherParam){long start = System.currentTimeMillis();log.info("uploadFile url: {}.",url);HttpClient client = HttpClients.createDefault();HttpPost post = new HttpPost(url);//设置参数post.setProtocolVersion(HttpVersion.HTTP_1_1);RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONN_TIMEOUT).setSocketTimeout(READ_TIMEOUT).build();post.setConfig(requestConfig);try {ContentType contentType = ContentType.create("multipart/form-data", StandardCharsets.UTF_8);MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532).setCharset(StandardCharsets.UTF_8).setContentType(contentType);//添加文件参数for (Map.Entry<String, FileWrapper> fileWrapperEntry : fileParam.entrySet()) {String k = fileWrapperEntry.getKey();FileWrapper v = fileWrapperEntry.getValue();log.info("fileName: {}, fileMd5: {}",k, MD5Util.md5(FileUtils.readFileToByteArray(v.getFile())));builder.addPart(k,new FileBody(v.getFile(),contentType, v.getFileName()));}//添加其他参数if (MapUtils.isNotEmpty(otherParam)){otherParam.forEach((k,v) -> builder.addTextBody(k,v,contentType));}// 设置请求实体post.setEntity(builder.build());HttpResponse response = client.execute(post);return EntityUtils.toString(response.getEntity(),StandardCharsets.UTF_8);} catch (Exception e) {log.error("uploadFile fail. url: {}",url,e);throw new RuntimeException("uploadFile exception ", e);}finally {log.info("uploadFile cost {}ms",System.currentTimeMillis()-start );}}public static class FileWrapper{private File file;private String fileName;private String contentType;public FileWrapper() {}public FileWrapper(File file, String fileName, String contentType) {this.file = file;this.fileName = fileName;this.contentType = contentType;}public File getFile() {return file;}public void setFile(File file) {this.file = file;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public String getContentType() {return contentType;}public void setContentType(String contentType) {this.contentType = contentType;}}
方式二:RestTemplate
public String uploadFile(byte[] fileData, String fileName, LocalDateTime time) {//构建请求头HttpHeaders headers = new HttpHeaders();MediaType type = MediaType.parseMediaType("multipart/form-data");headers.setContentType(type);headers.setContentLength(fileData.length);headers.setContentDispositionFormData("media", fileName);DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHH");String format = time.format(formatter);String date = format.substring(0, 8);String hourPart = format.substring(8, 10);//构建请求体MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();ByteArrayResource fileAsResource = new ByteArrayResource(fileData){@Overridepublic String getFilename() {return fileName;}@Overridepublic long contentLength() {return fileData.length;}};//其他参数parts.add("file", fileAsResource);parts.add("fileName", fileName);parts.add("date", date);parts.add("hour", hourPart);parts.add("fileType", config.getFileType());parts.add("businessType", config.getBusinessType());HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<>(parts, headers);//发送post请求上传文件ResponseEntity<String> responseEntity = restTemplate.postForEntity(config.getUrl() + "/uploadFile", formEntity, String.class);JSONObject response= JSONObject.parseObject(responseEntity.getBody());if (response!= null && Integer.parseInt(response.get("code").toString()) == 0) {//得到存储地址return (String) response.get("path");} else {log.error("response is null and file name is {}", fileName);return "";}}
相关文章:
Http文件上传
方式一:HttpClient public static String uploadFile(String url, Map<String, FileWrapper> fileParam, Map<String,String> otherParam){long start System.currentTimeMillis();log.info("uploadFile url: {}.",url);HttpClient client …...
哈希C++
文章目录 一.哈希的概念1.直接定址法2.负载因子 二.哈希函数1.除法散列法 / 除留余数法2.乘法散列法3.全域散列法(了解) 三.处理哈希冲突哈希冲突:1.开放定址法(1)线性探测:(2)二次探…...
C++11(中)
C11(中) 1.可变参数模板1.1.使用场景 2.lambda表达式(重要)2.1.使用说明2.2.函数对象与lambda表达式 3.线程库3.1.thread3.2.atomic原子库操作3.3.mutex3.3.1.mutex的种类3.3.2.lock_guard3.3.3.unique_lock 🌟&#x…...
vim 如何高亮/取消高亮
高亮 :在ESC模式下使用 shift # 取消高亮:在ESC模式下输入英文输入 :nohl (no highlight)...
C#中面试的常见问题008
1.内存泄露 内存泄露的原因: 未释放动态分配的内存:在使用malloc、new等动态内存分配函数后,未能正确释放内存。引用计数错误:在引用计数管理内存的语言中,增加引用计数但未相应减少,导致内存无法释放。循…...
【系统架构设计师】真题论文: 论数据访问层设计技术及其应用(包括解题思路和素材)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2016年 试题3)解题思路论文素材参考(1)数据访问层设计 JDBC 技术(2)ORM 框架技术 - Hibernate(3)ORM 框架技术 - MyBatis(4)数据访问层设计模式 - DAO 模式(5)数据访问层设计模式 - Repositor…...
力扣整理版九:贪心算法(待整理)
局部最优 全局最优 局部最优可以推出全局最优 并且想不出反例 ----------------------------- (1) 455 分发饼干 (2) 1005 k次取反后最大化的数组和 (3) 860 柠檬水找零 (2) 376 摆动序列 (3) 122 买卖股票的最佳时机2 (4) 135 分发糖果 (4) 55 跳跃游戏 (5) 45 跳…...
香橙派--安装RKMPP、x264、libdrm、FFmpeg(支持rkmpp)以及opencv(支持带rkmpp的ffmpeg)(适用于RK3588平台)
1. 安装RKMPP git clone https://github.com/rockchip-linux/mppcd mpp/build/linux/aarch64./make-Makefiles.bashmake -j8sudo make installRKMPP:用于编解码测试,支持RK3588平台。 2. 安装x264 git clone https://code.videolan.org/videolan/x264…...
计算机毕业设计Python+大模型美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
1138:将字符串中的小写字母转换成大写字母
【题目描述】 给定一个字符串,将其中所有的小写字母转换成大写字母。 【输入】 输入一行,包含一个字符串(长度不超过100,可能包含空格)。 【输出】 输出转换后的字符串。 【输入样例】 helloworld123Ha 【输出样例】…...
Wireshark抓取HTTPS流量技巧
一、工具准备 首先安装wireshark工具,官方链接:Wireshark Go Deep 二、环境变量配置 TLS 加密的核心是会话密钥。这些密钥由客户端和服务器协商生成,用于对通信流量进行对称加密。如果能通过 SSL/TLS 日志文件(例如包含密钥的…...
Unity UGUI原理剖析
UI最重要的两部分 UI是如何渲染出来的点击事件如何触发何时发生UI重绘 1:UI如何渲染出来的 UI渲染一定是有顶点的,没有顶点就没法确定贴图的采样,UGUI的顶点在一张Mesh上创建,经过渲染管线UI就渲染到屏幕上了,UI的渲染…...
实现Excel文件和其他文件导出为压缩包,并导入
导出 后端: PostMapping("/exportExcelData")public void exportExcelData(HttpServletRequest request, HttpServletResponse response, RequestBody ResData resData) throws IOException {List<Long> menuIds resData.getMenuIds();List<Co…...
Linux:基础开发工具
目录 软件包管理器yum 什么是软件包? 查看软件包 安装软件 卸载软件 vim vim的基本操作 gcc/g使用 预处理 编译 汇编 连接 make/Makefile .PHONY伪目标 定义使用变量 版本控制器Git 安装git git的使用 git add git commit git push git pull …...
【mac】终端左边太长处理,自定义显示名称(terminal路径显示特别长)
1、打开终端 2、步骤 (1)修改~/.zshrc文件 nano ~/.zshrc(2)添加或修改PS1,我是自定义了名字为“macminiPro” export PS1"macminiPro$ "(3)使用 nano: Ctrl o (字母…...
嵌入式硬件设计:从概念到实现的全流程
嵌入式硬件设计是现代电子技术中一个至关重要的领域,涉及从硬件架构设计到硬件调试的各个方面。它为我们日常生活中的各类智能设备、家电、工业控制系统等提供了强大的支持。本文将介绍嵌入式硬件设计的基本流程、关键技术、常用工具以及常见的挑战和解决方案&#…...
【Nginx】核心概念与安装配置解释
文章目录 1. 概述2. 核心概念2.1.Http服务器2.2.反向代理2.3. 负载均衡 3. 安装与配置3.1.安装3.2.配置文件解释3.2.1.全局配置块3.2.2.HTTP 配置块3.2.3.Server 块3.2.4.Location 块3.2.5.upstream3.2.6. mine.type文件 3.3.多虚拟主机配置 4. 总结 1. 概述 Nginx是我们常用的…...
数据库-MySQL-MybatisPlus实战
文章目录 前言一、整合mybatis-plus二、CRUD操作1、insert操作2、update操作3、delete操作 三、条件构造器(Wrapper)QueryWrapperUpdateWrapperLambdaQueryWrapperLambdaUpdateWrapper 四、分页查询五、自定义主键生成器六、总结 前言 mybatis相信都不陌生,目前互联…...
Vue2学习记录
前言 这篇笔记,是根据B站尚硅谷的Vue2网课学习整理的,用来学习的 如果有错误,还请大佬指正 Vue核心 Vue简介 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。 它基于标准 HTML、CSS 和 JavaScr…...
thinkphp中对请求封装
请求的封装 //调用 $res Http::post($this->baseUrl . $url,$params,[CURLOPT_HTTPHEADER > [Content-Type: application/json,Content-Length: . strlen($params),],]);<?php namespace fast; /*** 字符串类*/ class Http {/*** 发送一个POST请求*/public static …...
网络安全中的数据科学如何重新定义安全实践?
组织每天处理大量数据,这些数据由各个团队和部门管理。这使得全面了解潜在威胁变得非常困难,常常导致疏忽。以前,公司依靠 FUD 方法(恐惧、不确定性和怀疑)来识别潜在攻击。然而,将数据科学集成到网络安全中…...
通过指令导入/导出vscode扩展插件
导出扩展: 打开VSCode终端: 在VSCode中,你可以通过菜单栏的“终端”选项打开终端,或者使用快捷键Ctrl (反引号,通常在键盘左上角)。运行导出命令: 在终端中,输入以下命…...
vscode添加环境变量(mujoco)
文章目录 前言一、创建.env文件二、编写setting.jason 前言 之前一直用pycharm,最近改用cursor了,在pycharm中设置环境变量修改运行配置就行了,vscode要麻烦一些,记录一下。 一、创建.env文件 以mujoco环境变量为例,…...
0-1背包问题(1):贪心算法
问题: 有 n 个物品和背包的容量,每个物品的重量为 w[i],价值为 v[i],背包的容量为 W。选若干个物品放入购物车,物品不可分割,使价值最大。 问题分析: 首先考虑贪心策略: 每次挑选…...
Qt界面篇:QMessageBox高级用法
1、演示效果 2、用法注意 2.1 设置图标 用于显示实际图标的pixmap取决于当前的GUI样式。也可以通过设置icon pixmap属性为图标设置自定义pixmap。 QMessageBox::Icon icon(...
计算机操作系统——进程控制(Linux)
进程控制 进程创建fork()函数fork() 的基本功能fork() 的基本语法fork() 的工作原理fork() 的典型使用示例fork() 的常见问题fork() 和 exec() 结合使用总结 进程终止与$进程终止的本质进程终止的情况正常退出(Exit)由于信号终止非…...
游戏引擎学习第23天
实时代码编辑功能的回顾 当前实现的实时代码编辑功能已经取得了显著的成功,表现出强大的性能和即时反馈能力。该功能允许开发者在修改代码后几乎立即看到变化在运行中的程序中体现出来,极大提升了开发效率。尽管目前的演示内容较为简单,呈现…...
0基础学java之Day25
Vector /** 知识点:Vector独有的方法 理解: * Vector在JDK1.0开始就已经存在 -- 元老级别的集合类, * 集合框架的概念是JDK1.2开始才有的, * 开发人员为了将Vector保留下来…...
android集成FFmpeg步骤以及常用命令,踩坑经历
1、入坑第一步:首先集成的库必须正确。最好是有ndk的,FFmpeg有许多个版本,我才开始接触的时候随便选了一个,一般的 方法没有问题。但是涉及到需要使用libx264等条件进行编码时,老是报错,网上搜索资料也没有人说需要ndk的支持才行。这个问题困扰了好几天,怎么试不行,最后…...
Mac——鼠标增强插件Mos
功能说明: 能够解决鼠标断续、不灵敏等鼠标问题。 下载地址: Mac——鼠标增强插件Mos...
【c++篇】:解读Set和Map的封装原理--编程中的数据结构优化秘籍
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:c篇–CSDN博客 文章目录 前言一.set和map的初步封装1.树的节点封装修改2.Find()查找函数3.红…...
华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座
HDC2024华为重磅发布全自研操作系统内核—鸿蒙内核,鸿蒙内核替换Linux内核成为HarmonyOS NEXT稳定流畅新基座。鸿蒙内核具备更弹性、更流畅、更安全三大特征,性能超越Linux内核10.7%。 鸿蒙内核更弹性:元OS架构,性能安全双收益 万…...
ArcGIS API for Javascript学习
一、ArcGIS API for Javascript 介绍 ArcGIS API for Javascript 是由美国 Esri 公司推出,跟随ArcGIS 9.3 同时发布的,是Esri 基于dojo 框架和 REST 风格实现的一套编程接口。通过 ArcGIS API for Javascript可以对ArcGIS for Server 进行访问ÿ…...
LeetCode 3206.交替组 I:遍历
【LetMeFly】3206.交替组 I:遍历 力扣题目链接:https://leetcode.cn/problems/alternating-groups-i/ 给你一个整数数组 colors ,它表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] : colors[i] …...
环形缓冲区
什么是环形缓冲区 环形缓冲区,也称为循环缓冲区或环形队列,是一种特殊的FIFO(先进先出)数据结构。它使用一块固定大小的内存空间来缓存数据,并通过两个指针(读指针和写指针)来管理数据的读写。当任意一个指针到达缓冲区末尾时,会自动回绕到缓冲区开头,形成一个"环"。…...
Maven 仓库
Maven 仓库对于管理构建 Java 项目所需的依赖和插件至关重要。 Maven 仓库主要有三种类型:本地仓库、中央仓库和远程仓库。 本文将探讨每种仓库的用途以及如何有效使用它们。 Maven 仓库类型 本地仓库 本地仓库是位于您本地机器上的一个目录,Maven 在…...
29.UE5蓝图的网络通讯,多人自定义事件,变量同步
3-9 蓝图的网络通讯、多人自定义事件、变量同步_哔哩哔哩_bilibili 目录 1.网络通讯 1.1玩家Pawn之间的同步 1.2事件同步 1.3UI同步 1.4组播 1.5变量同步 1.网络通讯 1.1玩家Pawn之间的同步 创建一个第三人称项目 将网络模式更改为监听服务器,即将房主作为…...
计算机网络习题解答--个人笔记(未完)
本篇文章为关于《计算机网络-自顶向下方法第七版》的阅读总结和课后习题解答(未完待续) 第二章: cookie:(这里是比较老版本的HTTP,具体HTTPs是怎么实现的不是很清楚)cookie的原理其实很简单。就是在HTTP消息头上又多…...
Unity图形学之雾Fog
1.设置雾化: 2.雾化变化曲线:FogMode (1)线性: (2)一次指数: (3)二次指数: Shader "Custom/FogTest" {Properties{_Color ("Color…...
ML 系列:第 36 节 — 统计学中的抽样类型
ML 系列:第 36 天 — 统计学中的抽样类型 文章目录 一、说明二、抽样方法三、简单随机抽样四、 Stratified Sampling分层抽样五、 Cluster Sampling 整群抽样六、Systematic Sampling系统抽样七、Convenience Sampling便利抽样八、结论 一、说明 统计学中的抽样类型…...
docker-compose部署java服务
文章目录 一、下载安装docker-compose二、编写Dockerfile文件三、编写docker-compose.yml文件配置说明 四、服务启动五、测试与验证 一、下载安装docker-compose 在安装docker时,并不会同时把docker-compose安装好,需要额外安装一下 下载docker-compos…...
ubuntu22开机自动登陆和开机自动运行google浏览器自动打开网页
一、开机自动登陆 1、打开settings->点击Users 重启系统即可自动登陆桌面 二、开机自动运行google浏览器自动打开网页 1、安装google浏览器 sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i ./google-chrome-stable…...
java接口对接标准
概述 最近在跟许多外部平台对接,遇到了很多问题,在此记录一下接口的对接标准。 接口对接标准 确认环境,分别获取di和prd环境的接口信息,比如域名。确认不同环境的防火墙是否连通。接口校验,接口携带的token信息如何…...
训练的decoder模型文本长度不一致,一般设置为多大合适,需要覆盖最长的文本长度么
在训练解码器模型时,文本长度不一致是常见的情况,需要根据任务的特性和数据集的长度分布来设置合理的最大长度 (max_length)。以下是一些指导原则,帮助你设置合适的最大长度: 1. 是否需要覆盖最长文本长度 覆盖最长文本长度: 如果任务对完整性要求很高(例如生成数学公式、…...
安装MySQL服务
安装版本MySQL8的安装包 安装界面 在这里选择MySQL中的Server only 只安装服务器端 如果选择custom需要如下图 进入配置导向,点击ready to configure,点击next即可 采用默认形式 执行成功后,会出现自动选择项 点击next然后再点击Finish 启动…...
十二、正则表达式、元字符、替换修饰符、手势和对话框插件
1. 正则表达式 1.1 基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&g…...
Unreal从入门到精通之如何绘制用于VR的3DUI交互的手柄射线
文章目录 前言实现方式MenuLaser实现步骤1.Laser和Cursor2.移植函数3.启动逻辑4.检测射线和UI的碰撞5.激活手柄射线6.更新手柄射线位置7.隐藏手柄射线8.添加手柄的Trigger监听完整节点如下:效果图前言 之前我写过一篇文章《Unreal5从入门到精通之如何在VR中使用3DUI》,其中讲…...
如何提升编程能力第二篇
如何提升编程能力2 1. 引言2. 掌握理论基础2.1 理解编程语言的核心2.2 数据结构与算法2.3 计算机基础与系统设计3.1 多写代码3.2 参与开源项目3.3 开发自己的项目 4. 提高代码质量4.1 代码风格与可读性4.2 测试驱动开发 1. 引言 编程是推动现代科技发展的核心技能,…...
【AI日记】24.11.26 聚焦 kaggle 比赛
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 核心工作 1 内容:研究 kaggle 比赛时间:3 小时 核心工作 2 内容:学习 kaggle 比赛 Titanic - Machine Learning from Disaster时间:4 小时备注:这…...
计算机网络八股整理(一)
计算机网络八股文整理 一:网络模型 1:网络osi模型和tcp/ip模型分别介绍一下 osi模型是国际标准的网络模型,它由七层组成,从上到下分别是:应用层,表示层,会话层,传输层,…...