HttpClient上传文件

2023-11-05

1、Using the AddPart Method

form表单上传两个文本、一个文件:

/**
 * 上传文件及文本
 * @throws ClientProtocolException
 * @throws IOException
 * @author ybwei
 */
@Test
public void uploadFileAndText() throws ClientProtocolException, IOException {
	String textFileName = "1.txt";
	// 创建HttpClient对象
	CloseableHttpClient client = HttpClients.createDefault();

	File file = new File(textFileName);
	HttpPost post = new HttpPost("http://localhost:8080/uploadByteAndText");
	FileBody fileBody = new FileBody(file, ContentType.DEFAULT_BINARY);
	StringBody stringBody1 = new StringBody("Message 1", ContentType.MULTIPART_FORM_DATA);
	StringBody stringBody2 = new StringBody("Message 2", ContentType.MULTIPART_FORM_DATA);
	// 
	MultipartEntityBuilder builder = MultipartEntityBuilder.create();
	builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
	builder.addPart("upfile", fileBody);
	builder.addPart("text1", stringBody1);
	builder.addPart("text2", stringBody2);
	HttpEntity entity = builder.build();
	//
	post.setEntity(entity);
	HttpResponse response = client.execute(post);
	entity = response.getEntity();
	String result = EntityUtils.toString(entity);
	System.out.println(result);
}

2、Using the addBinaryBody and addTextBody Methods

2.1上传文本及文件

/**
 * @throws ClientProtocolException
 * @throws IOException
 * @author ybwei
 */
@Test
public void addBinaryBody() throws ClientProtocolException, IOException {
	String textFileName = "d:/1.txt";
	// 创建HttpClient对象
	CloseableHttpClient client = HttpClients.createDefault();

	File file = new File(textFileName);
	HttpPost post = new HttpPost("http://localhost:8080/uploadByteAndText");
	String message = "This is a multipart post";
	MultipartEntityBuilder builder = MultipartEntityBuilder.create();
	builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
	builder.addBinaryBody("upfile", file, ContentType.DEFAULT_BINARY, textFileName);
	builder.addTextBody("text", message, ContentType.DEFAULT_BINARY);
	//
	HttpEntity entity = builder.build();
	post.setEntity(entity);
	HttpResponse response = client.execute(post);
	entity = response.getEntity();
	String result = EntityUtils.toString(entity);
	System.out.println(result);
}

2.2 Uploading a Zip File, an Image File, and a Text Part

/**
 * @throws ClientProtocolException
 * @throws IOException
 * @author ybwei
 */
@Test
public void addZip() throws ClientProtocolException, IOException {
	String zipFileName="d:/1.zip";
	String imageFileName="d:/1.jpg";
	// 创建HttpClient对象
	CloseableHttpClient client = HttpClients.createDefault();

	HttpPost post = new HttpPost("http://localhost:8080/uploadByteAndText");
	InputStream inputStream = new FileInputStream(zipFileName);
	File file = new File(imageFileName);
	String message = "This is a multipart post";
	MultipartEntityBuilder builder = MultipartEntityBuilder.create();
	builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
	builder.addBinaryBody("upfile", file, ContentType.DEFAULT_BINARY, imageFileName);
	builder.addBinaryBody("upstream", inputStream, ContentType.create("application/zip"), zipFileName);
	builder.addTextBody("text", message, ContentType.TEXT_PLAIN);
	//
	HttpEntity entity = builder.build();
	post.setEntity(entity);
	HttpResponse response = client.execute(post);
	entity = response.getEntity();
	String result = EntityUtils.toString(entity);
	System.out.println(result);
}

2.3 Uploading a Byte Array and Text

/**
 * 上传byte和text
 * @author ybwei
 * @throws IOException
 * @throws ClientProtocolException
 */
@Test
public void uploadByteAndText() throws ClientProtocolException, IOException {
	String textFileName = "1.txt";
	// 创建HttpClient对象
	CloseableHttpClient client = HttpClients.createDefault();

	HttpPost post = new HttpPost("http://localhost:8080/uploadByteAndText");
	String message = "This is a multipart post";
	byte[] bytes = message.getBytes();
	//
	MultipartEntityBuilder builder = MultipartEntityBuilder.create();
	builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
	builder.addBinaryBody("upfile", bytes, ContentType.DEFAULT_BINARY, textFileName);
	builder.addTextBody("text", message, ContentType.TEXT_PLAIN);
	//
	HttpEntity entity = builder.build();
	post.setEntity(entity);
	HttpResponse response = client.execute(post);
	entity = response.getEntity();
	String result = EntityUtils.toString(entity);
	System.out.println(result);
}

3、controller接收

@RequestMapping(value = "/uploadByteAndText", method = RequestMethod.POST)
public String uploadByteAndText(@RequestParam("upfile") MultipartFile uploadFile, @RequestParam("text") String id) {
	String result = "OK";
	InputStream fis = null;
	OutputStream outputStream = null;
	try {
		fis = uploadFile.getInputStream();
		outputStream = new FileOutputStream("D:\\1\\" + uploadFile.getOriginalFilename());
		IOUtils.copy(fis, outputStream);
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		if (fis != null) {
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		if (outputStream != null) {
			try {
				outputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	return result;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpClient上传文件 的相关文章

  • 如何在 JavaFX 中连接可观察列表?

    我所说的串联是指获得一个新列表 该列表侦听所有串联部分的更改 方法的目的是什么FXCollections concat ObservableList
  • 为什么即使我的哈希码值相同,“==”也会返回 false

    我写了一个像这样的课程 public class HashCodeImpl public int hashCode return 1 public static void main String args TODO Auto generat
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • 如何在字段值无效的情况下更改 Struts2 验证错误消息?

    我在 Web 表单上使用 Struts2 验证 如果字段假设为整数或日期 则
  • Java Applet 中的 Apache FOP - 未找到数据的 ImagePreloader

    我正在研究成熟商业产品中的一个问题 简而言之 我们使用 Apache POI 库的一部分来读取 Word DOC 或 DOCX 文件 并将其转换为 XSL FO 以便我们可以进行标记替换 然后 我们使用嵌入到 Java 程序中的 FOP 将
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

    给定 XML
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 创业之路-67]:创业公司不同的产品模式

    模式1 科研型 预研型 3 5年 市场还不成熟 需求还没有显性 属于预测性需求 行业内还没有的成熟的产品形态 行业和自身的技术也都不成熟 还需要一定的酝酿期和技术积累 产品研发通常需要三年以上 甚至五年以上 需要投资资金烧钱 做未来的事 前
  • python读取fits第三方库_python-astropy.io.fits从具有多个HDU的大型fits文件中读取行

    我有一个约50GB的fits文件 其中包含多个HDU 它们都具有相同的格式 一个带有1E5对象和1E6时间戳的 1E5 x 1E6 数组 HDU描述了不同的物理属性 例如磁通 RA DEC等 我只想从每个HDU中读取5个对象 即 5 x 1
  • Databend 开源周报 第 97 期

    Databend 是一款现代云数仓 专为弹性和高效设计 为您的大规模分析需求保驾护航 自由且开源 即刻体验云服务 https app databend cn What s On In Databend 探索 Databend 本周新进展 遇
  • v.douyin.com生成制作抖音缩短口令网址php接口方法

    v douyin com是抖音官方的接口 可以制作头条 火山 抖音短视频等官方域名的任意生成接口 可以推广抖音号 第三方网址 头条文章等 效果非常号 这里记录下api接口 纯技术php生成 具体规则可以去抖音的开放平台去申请对应接口 这里用
  • 原码,反码,补码

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net Jason M Ho article details 78700434 数值在计算机中是以补码的方式存储的 在探求为何计算机要使用补码之前 让我们先
  • 今日头条(OCPC)广告激活数据对接-JAVA版

    最近在今日头条投广告 头条反馈可以按照实际激活数据的转换来付费 也就是说 只有用户真的下载并打开应用了才收费 过程类似与早年间的GHOST系统预装软件 下面说下头条的整个逻辑 头条处理逻辑 1 用户在头条点击广告页 广告页引领用户去下载 用
  • Day4 Data Management II part1 ifelse/loop/function in R

    This article is based on R 4 1 2 1 ifelse if else a Identifying fulfilled conditions all condition Returns TRUE if the c
  • 【Ansible自动化运维工具】Ansible变量之lookup生成变量方法

    Ansible自动化运维工具 Ansible变量之lookup生成变量方法 一 lookup插件介绍 1 lookup简介 2 lookup使用场景 3 lookup获取的数据源 4 lookup的注意事项 二 查看lookup支持的模块列
  • 2023WAIC大会后记:我们距离AGI还有多远?

    只有解决了算力问题 才能离大模型的商业化之路更进一步 等等问题 都在成为当下限制我们想象力的关键因素 继2023世界人工智能大会后 大模型还有多少想象力 作者 思杭 编辑 皮爷 出品 产业家 1亿用户 似乎是每个App都想踏过的 门槛 Ti
  • cadence的PCB封装库导入Altium designer

    目录 说明及作者联系方式 导入封装库说明 实例 导入cadence PCB文件 生成封装库 说明及作者联系方式 作者的软件是AD20 cadence是17 4 参考官方文档 官方文档原地址可点击此处跳转 作者还拥有个人公众号 会写一些感悟文
  • 静态链接与动态链接

    C代码编译生成可执行程序会经过如下过程 链接就是把目标文件与一些库文件生成可执行文件的一个过程 1 什么是静态链接 静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法 链接器是一个独立程序 将一个或多个库或目标文件 先前由编译器或
  • IDEA创建CLASS时自动生成头部文档注释

    注释效果 设置如下 if PACKAGE NAME PACKAGE NAME package PACKAGE NAME end parse File Header java ClassName NAME Author USER Descri
  • 经典css系列面试题。

    1 对BFC规范 块级格式化上下文 的理解 BFC 块级格式化上下文 一块独立的区域 有自己的规则 bfc中的元素与外界的元素互不影响 BFC是一块用来独立的布局环境 保护其中内部元素不受外部影响 也不影响外部 怎么触发BFC 1 floa
  • 降低电源纹波噪声的方法

    一 降低电源纹波噪声只需三步 降低电源纹波噪声只需三步 描述 在应用电源模块常见的问题中 降低负载端的纹波噪声是大多数用户都关心的 那么模块的纹波噪声该如何降低 下文为大家从纹波噪声的波形 测试方式 模块设计及应用的角度出发 阐述几种有效降
  • 服务器ibmc无法加载js文件,WEUI应用之JS常用信息提示弹层的封装

    weUI应用 自己用JS封装了几个常用的信息提示的弹层 测试页面的代码在后面有贴出 几个弹层如下图 HTML页面代码 weUI test 测试 function 提示弹层 取消关闭 确定做相应操作 dialog 标题1111111 内容11
  • ODrive踩坑(三)AS5047P磁编码器的ABI接口

    前两篇已经介绍过ODrive在Windows下的使用环境搭建 以及TLE5012B ABI编码器闭环运动的基本配置 ODrive教程资源导航 ODrive踩坑 一 windows下使用环境的搭建 odrivetool及USB驱动的安装 OD
  • Xftp使用root权限连接服务器时提示“ssh服务器拒绝了密码”

    参考网上很多方案修改过后还是不行 最终依据这篇博客修改后成功 原因是之前修改的配置文件不对 应该修改sshd config Xftp连接linux ubuntu 时提示ssh服务器拒绝了密码 请再试一次
  • MyBatis学习笔记:Mybatis简介

    MyBatis学习笔记 Mybatis简介 参考书籍 传统的JDBC编程 流程 缺点 Example ORM模型 Mybatis 起源 ORM模型 Example 参考书籍 深入浅出MyBatis技术原理与实战 ISBN 978 7 121
  • Unity--Awake()和Start()的区别

    Unity Awake 和Start 的区别 1 对象初始化之后先调用Awake 再调用Start 然后调用Update 2 无论脚本文件是否enable Awake 都会被调用 而Start 只在enable true的时候被调用 3 游
  • HttpClient上传文件

    1 Using the AddPart Method form表单上传两个文本 一个文件 上传文件及文本 throws ClientProtocolException throws IOException author ybwei Test