参考自:https://blog.csdn.net/qq_25958999/article/details/83988974

接收端Controller类中方法:

@RequestMapping(value = "uploadFile", method = RequestMethod.POST)
public String uploadFile(Model model, MultipartFile file, HttpServletRequest request,
@RequestParam(value = "id", defaultValue = "-9999999") int id,
@RequestParam(value = "name", defaultValue = "none") String name) {
return String.format("file = %s, id = %s, name = %s", file, id, name);
}

java发送http post请求

package com.example.demo;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map; public class TestRequest { private static final String host = "http://localhost:8080"; private static final String url = host + "/uploadFile"; public static void main(String[] args) { String fileName = "C:\\Users\\Admin\\Pictures\\1.PNG";
Map<String, Object> map = new HashMap<>();
map.put("id", 10000);
map.put("name", "Admin"); try {
uploadFile(fileName, map);
} catch (Exception e) {
e.printStackTrace();
}
} public static void uploadFile(String fileName, Map<String, Object> map) throws Exception {
// 换行符
final String newLine = "\r\n";
final String boundaryPrefix = "--";
// 定义数据分隔线
String BOUNDARY = "========7d4a6d158c9";
// 服务器的域名
URL url = new URL(TestRequest.url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置为POST情
conn.setRequestMethod("POST");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 设置请求头参数
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
try (
OutputStream outputStream = conn.getOutputStream();
DataOutputStream out = new DataOutputStream(outputStream);
) {
//传递参数 if (map != null) {
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry<String, Object> entry : map.entrySet()) {
stringBuilder.append(boundaryPrefix)
.append(BOUNDARY)
.append(newLine)
.append("Content-Disposition: form-data; name=\"")
.append(entry.getKey())
.append("\"").append(newLine).append(newLine)
.append(String.valueOf(entry.getValue()))
.append(newLine);
}
out.write(stringBuilder.toString().getBytes(Charset.forName("UTF-8")));
} // 上传文件
{
File file = new File(fileName);
StringBuilder sb = new StringBuilder();
sb.append(boundaryPrefix);
sb.append(BOUNDARY);
sb.append(newLine);
sb.append("Content-Disposition: form-data;name=\"file\";filename=\"").append(fileName)
.append("\"").append(newLine);
sb.append("Content-Type:application/octet-stream");
sb.append(newLine);
sb.append(newLine);
out.write(sb.toString().getBytes()); try (
DataInputStream in = new DataInputStream(new FileInputStream(file));
) {
byte[] bufferOut = new byte[1024];
int bytes = 0;
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
out.write(newLine.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
} // 定义最后数据分隔线,即--加上BOUNDARY再加上--。
byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine)
.getBytes();
// 写上结尾标识
out.write(end_data);
out.flush(); } catch (Exception e) {
e.printStackTrace();
} //定义BufferedReader输入流来读取URL的响应
try (
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);
) {
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

输出结果:

file = org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile@4e666138, id = 10000, name = Admin

springboot 文件上传及java使用post请求模拟文件上传的更多相关文章

  1. Ubuntu 上 执行命令 java -version 显示 没有那个文件或目录

    解决方法 执行 which java 发现默认java目录:/usr/bin/java . 查看 JAVA_HOME 路径:$JAVA_HOME,得到 /usr/local/java/jdk1.7.0 ...

  2. jmeter post请求在终端传参,并且指定请求参数文件

    命令:jmeter -n -t   jmeter_1.jmx   -l   report/report30.jtl    -Jnum=3000 -e -o   webresult/3000result ...

  3. Discuz模拟批量上传附件发帖

    简介 对于很多用discuz做资源下载站来说,一个个上传附件,发帖是很繁琐的过程.如果需要批量上传附件发帖,就需要去模拟discuz 上传附件的流程. 模拟上传 discuz 附件逻辑 dz附件储存在 ...

  4. discuz 模拟批量上传附件发帖

    discuz 模拟批量上传附件发帖 简介 对于很多用discuz做资源下载站来说,一个个上传附件,发帖是很繁琐的过程.如果需要批量上传附件发帖,就需要去模拟discuz 上传附件的流程. 插件地址 h ...

  5. Java程序导出成.jar文件、生成.exe可执行文件及打包成可执行安装程序(可在无Java环境的计算机上运行)--以个人所得税计算器为例

    Java程序导出成.jar文件.生成.exe可执行文件及打包成可执行安装程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 需要准备的软件: jdk, ...

  6. 零基础学Java(9)在mac上运行命令行提示"找不到或无法加载主类"

    天坑 遇到的问题:使用命令行执行命令:java EightSample,会报以下错误 错误: 找不到或无法加载主类 EightSample 运行环境 mac系统 IntelliJ IDEA编译器 Ja ...

  7. Springboot实现上传文件接口,使用python的requests进行组装报文上传文件的方法

    记录瞬间 近段时间使用Springboot实现了文件的上传服务,但是在使用python的requests进行post上传时,总是报错. 比如: 1.Current request is not a m ...

  8. 【Java EE 学习 72 上】【数据采集系统第四天】【增加调查logo】【文件上传】【动态错误页指定】【上传限制】【国际化】

    增加logo的技术点:文件上传,国际化 文件上传的功能在struts2中是使用文件上传拦截器完成的. 1.首先需要在页面上添加一个文件上传的超链接. 点击该超链接能够跳转到文件上传页面.我给该表单页面 ...

  9. java http工具类和HttpUrlConnection上传文件分析

    利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java ...

随机推荐

  1. javascript、jquery、AJAX总结 标签: javascriptjqueryajax 2016-01-23 10:25 2415人阅读

    其实在学习之前,就已经用上了js,jquery和ajax,不过当时不清楚这些的区别,就全都当成js来看,然后别人一说jquery,ajax都觉得好像很高级,等到自己学习的时候,倒是对这些更清楚了一点, ...

  2. 阿里云BaaS:降低区块链应用门槛,用技术构建商业互信

    5月8日,阿里云召开区块链服务(BaaS)商业化发布会,会上对BaaS产品.业务应用场景及生态策略进行了全面解读. 对于广大IT服务商和开发者而言,构建区块链应用存在三大痛点问题:成本高,研发投入大. ...

  3. Spring AOP 的实现 原理

    反射实现 AOP 动态代理模式实例说明(Spring AOP 的实现 原理)   比如说,我们现在要开发的一个应用里面有很多的业务方法,但是,我们现在要对这个方法的执行做全面监控,或部分监控.也许我们 ...

  4. VisualStudio 自定义外部命令

    通过自定义命令,可以在 VisualStudio 加上一些自定义命令,可以快速启动 git 或者做其他的事情 添加命令 首先打开工具 外部命令,点击添加,然后在弹出的窗口输入下面内容 例如添加内容是打 ...

  5. vue element 中自定义传值

    一直以来都不知道如何传自定义的值,一直只会默认的,今天终于找到方法了. 比如这个上传图片的控件,想带当前的index过去,就这样写.其它的类似 :http-request="(file,fi ...

  6. swiper仿tab栏切换

    转载  https://developers.weixin.qq.com/community/develop/article/doc/000040a5dc4518005d2842fdf51c13 小程 ...

  7. 解决ubuntu的Idea启动No JDK found. Please validate either IDEA_JDK, JDK_HOME or JAVA_HOME environment variable points to valid JDK installation.

    直接在idea安装目录下运行idea.sh可以正常启动,但是使用ubuntu的dash搜索出来的idea报错,No JDK found. Please validate either IDEA_JDK ...

  8. SuperSocket特点

    ²  简单易用,只需要几个类就能创建出健壮的Socket服务器端程序 ²  性能优良, 稳定可靠 ²  支持各种协议, 内置的协议解析工具让你把实现通信协议这种复杂的工作变得很简单 ²  自动支持SS ...

  9. 各种浏览器的兼容css

    http://blog.csdn.net/wyx100/article/details/50450728 1.Mozilla内核[css]元素选择器{-moz-transition:运动的样式 持续时 ...

  10. hdu 1599 find the mincost route(无向图的最小环)

    find the mincost route Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...