参考自: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. 14 个你可能不知道的 JavaScript 调试技巧

    了解你的工具可以极大的帮助你完成任务.尽管 JavaScript 的调试非常麻烦,但在掌握了技巧 (tricks) 的情况下,你依然可以用尽量少的的时间解决这些错误 (errors) 和问题 (bug ...

  2. sqlserver 序号重新计算

    DBCC CHECKIDENT('leshua_TradeData',NORESEED) DBCC CHECKIDENT('表名',NORESEED)

  3. day8_python网络编程(实验版本)

    1.简单的套接字通信 1.1.服务端 import socket # 买手机 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 插 ...

  4. C++ 结构体的定义

    struct 结构体名称{    数据类型 A:    数据类型 B; }结构体变量名; 相当于: struct 结构体名称{    数据类型 A:    数据类型 B; }; struct 结构体名 ...

  5. c++第一次的个人作业

    循环结构是c++中重要的结构用以实现代码的反复使用 三种不同的循环结构以及嵌套是必须认识与能够使用的 三种循环结构分别是: 在for循环中可以在for后的括号内加入初始条件,循环条件与参数变化.使得整 ...

  6. Python--day70--csrf简单用法、 跨站请求伪造和csrf_token使用

    1,csrf简单用法 2,Django里面的setting加入了防跨站伪造:这段代码帮你生成特殊字符串,帮你塞到html页面中来 3,csrf_token使用:

  7. Python--day19--sys模块

    sys模块 sys模块是与python解释器交互的一个接口 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys. ...

  8. 得到Access数据库中所有表名

    public static List<string> GetShemaTables(string db)        {                        string pa ...

  9. 关于top命令

    top命令交互操作指令 下面列出一些常用的 top命令操作指令 q:退出top命令 :立即刷新 s:设置刷新时间间隔 c:显示命令完全模式 t::显示或隐藏进程和CPU状态信息 m:显示或隐藏内存状态 ...

  10. Css布局常用 1.盒子内容局中 2. 物理一像素 3.倒三角形 绘制

    布局 对象属性 new Person('') 原型链 (创建对象.使用对象中的属性,如果没有那么就去原型找) new Person()      Person{   name:'', getname( ...