1.概述
本快速教程主要介绍如何使用Spring的RestTemplate上传一个多部分文件。
我们将会看到两个一个文件和多个文件-上传使用创建RestTemplate。
2.什么是HTTP多部分请求?
简单地说,基本的HTTP POST请求体以名称/值对的形式保存表单数据。
另一方面,HTTP客户端可以构造HTTP多部分请求向服务器发送文本或二进制文件;主要用于上传文件。
另一个常见的用例是发送带有附件的电子邮件。多部分文件请求将一个大文件分解成更小的块,并使用边界标记来指示块的开始和结束。
了解更多关于多部分请求的信金宝搏官网188be息在这里。
3.Maven的依赖
对于客户端应用程序来说,这个单一的依赖关系就足够了:
<依赖> < groupId > org。springframework < / groupId > < artifactId > spring web < / artifactId > <版本> 5.2.2。依赖版本< / > < / >
4.文件上传服务器
文件服务器API公开了两个用于分别上传单个和多个文件的REST端点:
- POST /服务器/ singlefileupload /
- POST /服务器/ multiplefileupload /
5.上传单个文件
首先,让我们看看控件上传单个文件创建RestTemplate。
我们需要创建HttpEntity有标题和正文。设置内容类型头的价值MediaType。MULTIPART_FORM_DATA。设置了这个标题后,创建RestTemplate自动封送文件数据和一些元数据。
元数据包括文件名、文件大小和文件内容类型(例如文本/平原):
HttpHeaders = new HttpHeaders();headers.setContentType (MediaType.MULTIPART_FORM_DATA);
接下来,将请求主体构建为LinkedMultiValueMap类。LinkedMultiValueMap包装LinkedHashMap为每个键存储多个值LinkedList。
在我们的例子中getTestFile ()方法动态生成一个虚拟文件,并返回FileSystemResource:
MultiValueMap body = new LinkedMultiValueMap<>();的身体。添加(“文件”,getTestFile ());
最后,构造一个HttpEntity实例,该实例包装标题和主体对象并使用创建RestTemplate。
注意,单个文件上传指向/服务器/ singlefileupload /端点。
最后,电话创建restTemplate。postForEntity ()完成连接到给定URL并将文件发送到服务器的工作:
HttpEntity> requestEntity = new HttpEntity<>(body, headers);String serverUrl = "http://localhost:8082/spring-rest/fileserver/singlefileupload/";RestTemplate RestTemplate = new RestTemplate();响应实体 response = restTemplate .postForEntity(serverUrl, requestEntity, String.class);
6.上传多个文件
在多个文件上传中,与单个文件上传相比,惟一的变化是构造请求体。
让我们创建多个文件和用相同的键添加它们在MultiValueMap。
显然,请求URL应该指向多个文件上传的端点:
MultiValueMap body = new LinkedMultiValueMap<>();Body.add(“文件”,getTestfile());Body.add(“文件”,getTestfile());Body.add(“文件”,getTestfile());HttpEntity> requestEntity = new HttpEntity<>(body, headers);string serverURL =“http:// localhost:8082 / spring-rest / fileserver / multifileupload /”;RestTemplate RestTemplate = new RestTemplate();响应实体 response = restTemplate .postForEntity(serverUrl, requestEntity, String.class);
总是有可能的使用多文件上传模型单文件上传。
7.结论
总之,我们看到了MultipartFile使用Spring转移创建RestTemplate。
与往常一样,示例客户机和服务器源代码是可用的在github上。