当前位置: 首页 > news >正文

HttpClient调用SpringBoot项目的文件上传接口实现文件上传

1.导入httpclient的jar包

这里导入了httpclient、httpmime11

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.4</version><relativePath/></parent><groupId>com.liyh</groupId><artifactId>springboot-file</artifactId><version>0.0.1</version><name>springboot-file</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><!-- 做断点下载使用 --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

 2.增加配置

在yml文件中增加配置

# 配置服务端口
server:port: 8018spring:servlet:multipart:#spring Boot中有默认的文件上传组件,在使用ServletFileUpload时需要关闭Spring Boot的默认配置enabled: true#設置單個文件的大小max-file-size: 1GB#設置單次請求文件的縂大小max-request-size: 10GB

3.编写文件上传接口

package com.liyh.controller;import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;@RestController
public class FileUploadController {private static final String UPLOAD_DIR = "D:\\path\\upload\\";@PostMapping("/api/upload")public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file,@RequestParam("description") String description,@RequestParam("userId") String userId) {if (file.isEmpty()) {return ResponseEntity.badRequest().body("No file provided");}try {System.out.println("description: " + description);System.out.println("userId: " + userId);Path destination = Paths.get(UPLOAD_DIR, file.getOriginalFilename());Files.copy(file.getInputStream(), destination);return ResponseEntity.ok("File uploaded successfully");} catch (IOException e) {return ResponseEntity.status(500).body("Failed to upload file");}}
}

4.使用httpclient进行单元测试

 

package com.health.manage;import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.jupiter.api.Test;import java.io.File;
import java.io.IOException;public class FileUploadTest {@Testpublic void testFileUpload() throws IOException {CloseableHttpClient httpClient = HttpClients.createDefault();HttpPost httpPost = new HttpPost("http://localhost:8018/api/upload");//httpPost.setHeader("Content-Type", "multipart/form-data");File fileToUpload = new File("E:\\tempUpload\\XXLJOB名称实验.xlsx");HttpEntity entity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532).addPart("file", new FileBody(fileToUpload)).addTextBody("description", "This is a test file", ContentType.TEXT_PLAIN).addTextBody("userId", "12345", ContentType.TEXT_PLAIN).build();httpPost.setEntity(entity);try (CloseableHttpResponse response = httpClient.execute(httpPost)) {System.out.println("Response Code : " + response.getStatusLine().getStatusCode());String responseString = EntityUtils.toString(response.getEntity(), "UTF-8");System.out.println("Response Body : " + responseString);} finally {httpClient.close();}}
}

后记 

如果您在一台电脑上使用httpclient测试文件上传接口,请你最好新建两个springboot工程

为啥要用httpclient方式来调用接口,不直接通过前端调用,一个很重要的原因是后台调用接口会比前端安全很多

 

相关文章:

HttpClient调用SpringBoot项目的文件上传接口实现文件上传

1.导入httpclient的jar包 这里导入了httpclient、httpmime11 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sch…...

[leetcode]kth-smallest-element-in-a-sorted-matrix 有序矩阵中第k小元素

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool check(vector<vector<int>>& matrix, int mid, int k, int n) {int i n - 1;int j 0;int num 0;while (i > 0 && j < n) {if (matrix[i][j] < mid) {num i 1;j;…...

【经典面试题】是否形成有环链表

1.环形链表oj 2. oj解法 利用快慢指针&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; bool hasCycle(struct ListNode *head) {ListNode* slow head, *fast…...

Flask 用 Redis 缓存键值对-实例

Flask 使用起 Redis 来简直就是手到擒来&#xff0c;比 MySQL 简单多了&#xff0c;不需要那么多配置&#xff0c;实际代码就这么多&#xff0c;直接复制就能用。除了提供简单实用的实例以外&#xff0c;本文后面还会简单介绍一下 Redis 的安装与使用&#xff0c;初学者也能一看…...

我的世界1.21多种服务端开服教程,原版/Forge/Fabric/Paper/Mohist...,Minecraft开服教程

Minecraft&#xff08;MC&#xff09;1.21版多种服务端开服教程&#xff0c;我的世界1.21服务器搭建教程&#xff0c;MC原版/Forge/Fabric/Paper/Mohist服务端搭建教程&#xff0c;我的世界MOD/插件服开服教程。 本教程使用 Linux系统MCSManager 面板来搭建Minecraft服务器。 …...

docker安装nginx并配置https

参考 docker安装nginx并配置https-腾讯云开发者社区-腾讯云 (tencent.com) 证书的生成 参见&#xff1a;SpringBoot项目配置HTTPS接口的安全访问&#xff08;openssl配置&#xff09;_配置接口访问-CSDN博客 步骤 1: 拉取Nginx镜像 docker pull nginx 好使的镜像如下&#x…...

永磁同步电机控制算法--基于 SVM 的无磁链环 DTC

永磁同步电机无磁链环 DTC 通过控制定子磁链交轴分量来直接控制转矩&#xff0c;不再要求控制磁链幅值恒定&#xff0c;省去了传统 DTC 中的磁链环&#xff0c;不仅转矩响应更快&#xff0c;有效抑制了转矩脉动&#xff0c;而且提高了电机功率因数。但无磁链环 DTC 方案仍采用传…...

如何避免在 Docker 容器中遇到 MAC 地址冲突和 IP 地址冲突的问题

在 Docker 容器中遇到 MAC 地址冲突和 IP 地址冲突的问题时&#xff0c;通常是由于 Docker 在分配网络资源时出现了一些问题。虽然这种情况并不常见&#xff0c;但仍有可能发生。以下是一些原因和可能的解决方案&#xff1a; 原因分析 Docker 版本问题&#xff1a;某些 Docke…...

arm64架构下源码编译安装kafka —— 筑梦之路

一般来说&#xff0c;直接使用官方提供的二进制文件即可&#xff0c;没有必要使用源码编译安装的方式&#xff0c;而对于有特殊用途的&#xff0c;选择源码编译安装无疑是更好地选择。比如修改源码实现想要的功能&#xff0c;mirrormaker2保持topic名称不变。 git clone https…...

LabVIEW前面板占满整个屏幕(转)

希望在运行一个LabVIEW程序时&#xff0c;它的前面板能够占据整个屏幕&#xff0c;且不显示Windows的任务栏或其他任何的LabVIEW菜单选项。怎样才能实现这一功能&#xff1f; 您可以通过手动配置或编程的方式实现该功能。 手动配置VI属性 您可以通过以下操作&#xff0c;将…...

Promise.all、any、race和allSettled的相同点与不同点与应用场景

在JavaScript中&#xff0c;Promise对象是一种处理异步操作的方式。它允许我们以一种更优雅的方式来处理异步代码&#xff0c;而不是使用回调函数。在Promise中&#xff0c;有一些方法可以帮助我们更好地管理多个Promise实例&#xff0c;这些方法包括Promise.all、Promise.any、…...

Ubuntu下如何设置程序include搜索路径及链接路径

添加库的include及lib路径 linux下系统默认路径为 /usr/include, /usr/local/include, gcc在编译程序时会按照当前目录路径->系统默认路径->系统环境变量的路径方式去查找&#xff0c;所以当我们想调用的库未安装在系统默认路径时&#xff0c;我们可以通过手动添加环境变…...

FLinkCDC引起的生产事故(二)

背景&#xff1a; 最近在做实时数据的抽取工作&#xff0c;利用FLinkCDC实时抽取目标库Oracle的数据到Doris中&#xff0c;但是在抽取的过程中&#xff0c;会导致目标库的生产库数据库非常卡顿&#xff0c;为了避免对生产环境的数据库造成影响&#xff0c;对生产环境的数据库利…...

【产品经理】WMS多仓调拨转移说明

对于仓储管理来说&#xff0c;越来越多企业开始应用WMS进行系统化的管理&#xff0c;以提升仓库的作业效率。本文作者从业务流程和基础功能两个方面展开介绍&#xff0c;希望对你有帮助。 一、业务流程 。在线下业务流程拓展&#xff0c;仓库不断增多的过程中&#xff0c;由于…...

每日一练:奇怪的TTL字段(python实现图片操作实战)

打开图片&#xff0c;只有四种数字&#xff1a;127&#xff0c;191&#xff0c;63&#xff0c;255 最大数字为255&#xff0c;想到进制转换 将其均转换为二进制&#xff1a; 发现只有前2位不一样 想着把每个数的前俩位提取出来&#xff0c;组成新的二进制&#xff0c;然后每…...

【Java开发实训】day03——方法的注意事项

目录 一、方法的基本概念 二、void和return关键字 三、单一返回点原则 四、static方法使用说明 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于…...

HarmonyOS NEXT:一次开发,多端部署

寄语 这几年特别火的uni-app实现了“一次开发&#xff0c;多端使用”&#xff0c;它这个端指的是ios、安卓、各种小程序这些&#xff0c;而HarmonyOS NEXT也提出了“一次开发&#xff0c;多端部署”&#xff0c;而它这个端指的是终端设备&#xff0c;也就是我们的手机、平板、电…...

Bilibili Android一二面凉经(2024)

BiliBili Android一二面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《BiliBili Android一二面凉经(2024)》。 面试职位: 高级Android开发工程师&…...

数据库内核研发学习之路(一)

已经上了几天班了&#xff0c;开始做一些总结性的工作。 数据库内核研发首当其中的便是环境配置&#xff0c;今天先介绍一下虚拟机之类的环境搭建&#xff0c;在之前已经写过一篇关于VMware搭建虚拟机的博客了&#xff0c;有兴趣可以去看看&#xff0c;这里我再总结一下使用Vi…...

LSTM:深度学习中的时间序列处理大师

LSTM&#xff1a;深度学习中的时间序列处理大师 引言 在深度学习领域&#xff0c;处理时间序列数据是一项极具挑战性的任务。时间序列数据广泛存在于金融、医疗、气象、自然语言处理等多个领域&#xff0c;这些数据不仅具有时间依赖性&#xff0c;还常常伴随着复杂的长期依赖…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...