file association没有 *.class文件_springboot如何MultipartFile文件跨服务
大家好,因为近期做需求中遇到了文件上传这个东西,而且我这个还是跨服务去传输文件的所以我这边使用了httpclient和RestTemplate去做,但是最后还是用的httpclient。feign和RestTemplate在超大文件下会OOM所以适用于小文件传输我这边测试的在1G以下。httpclient好像是无限哈哈哈。(具体多少大家有时间可以去测一下)
1.被调用服务的Controller
1.这块使用@RequestParam(“file”)或者@RequestPart(“file”)都是可以接到参数的。
2.(“file”)一定要和远程调用代码传的参数名一样 否则接不到参数。
@RequestMapping(value = "/remoteCallUpload",method = RequestMethod.POST) @ApiOperation("测试远程调用上传") public String remoteCallUpload(@RequestParam("file") MultipartFile file){ System.out.println(file); return "成功"; }
1.RestTemplate
1.如果用RestTemplate的话首先需要把RestTemplate交给spring去管理所以先来一个配置类。
2.@SuppressWarnings(“all”) 这个注解是jdk自带的的意思是 意志所有的警告。
@Configuration@SuppressWarnings("all")public class RestTemplateConfig { @Autowired RestTemplateBuilder builder; @Bean public RestTemplate restTemplate() { return builder.build(); }}
2.RestTemplate远程调用文件传输
这里有几个要注意的地方
1.必须重写否则传输时报错
ByteArrayResource byteArrayResource = new ByteArrayResource(file.getBytes()) { @Override public String getFilename() { return file.getOriginalFilename(); } };
2.设置请求头因为就在模拟前端发送上传文件的请求所以请求头必须是multipart/form-data
3.第三个参数是被调用Controller的返回值类型,我的测试Controller写的是String所以我的这边第三参数就是String.Class
restTemplate.postForObject(url, files, String.class);
4.url就是被调用服务的地址 如:
http://192.168.3.7:50003/test/remoteCallUpload
以上是注意事项。
@Autowiredprivate RestTemplate restTemplate;private String gettestRestTemplate(MultipartFile file, String url) throws IOException { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("multipart/form-data"); headers.setContentType(type); MultiValueMap form = new LinkedMultiValueMap<>(); ByteArrayResource byteArrayResource = new ByteArrayResource(file.getBytes()) { @Override public String getFilename() { return file.getOriginalFilename(); } }; form.add("file", byteArrayResource); form.add("filename", file.getOriginalFilename()); //用HttpEntity封装整个请求报文 HttpEntity> files = new HttpEntity<>(form, headers); String flag = restTemplate.postForObject(url, files, String.class); return flag; }1234567891011121314151617181920212223
3.HttpClient
1.使用httpclient的话首先要引入pom文件坐标。
org.apache.httpcomponents httpclient 4.5.6org.apache.httpcomponents httpmime 4.5.612345678910
3.HttpClient远程调用文件传输
1.httpclient这段代码有要用的小伙伴直接粘过去就能用
注意一下返回值自己改一下就行execute.getEntity()
@SneakyThrows private String gettesthttpclient(MultipartFile file, String url) { CloseableHttpClient httpclient = HttpClients.createDefault(); RequestConfig requestConfig = RequestConfig.custom() .setConnectionRequestTimeout(10000) .setConnectTimeout(5000) .build(); HttpPost httpPost = new HttpPost(url); MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); // 解决中文文件名乱码问题 entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); entityBuilder.setCharset(Consts.UTF_8); ContentType contentType = ContentType.create(ContentType.TEXT_PLAIN.getMimeType(), Consts.UTF_8); entityBuilder.addBinaryBody("file", file.getInputStream(), ContentType.DEFAULT_BINARY, file.getOriginalFilename()); httpPost.setEntity(entityBuilder.build()); httpPost.setConfig(requestConfig); HttpResponse execute = httpclient.execute(httpPost); String flag = EntityUtils.toString(execute.getEntity()); return flag; }
总结
远程调用使用了RestTemplate和httpclient也可以使用feign,但是RestTemplate和feign大文件会OOM,httpclient不会所以大家可以根据自己场景去选择。
file association没有 *.class文件_springboot如何MultipartFile文件跨服务相关推荐
- springboot并发上传文件_springboot实现单文件和多文件上传
本文实例为大家分享了springboot实现单文件/多文件上传的具体代码,供大家参考,具体内容如下 package com.heeexy.example.controller; import com. ...
- springboot读取src下文件_springboot 下载模板文件 加载classpath文件路径(示例代码)...
项目需要下载导入模板,springboot使用如下下载方式可解决问题: /** * 导入模板下载 * @param req * @param resp * @param context * @retu ...
- form表单上传文件_SpringBoot中如何使用SpringMVC上传文件?
今天我们要说的这个话题很简单,不要问为啥,因为SpringBoot,哈哈.现在SpringBoot可以说人人都会用了,它的好处是显而易见的,大大的简化了配置,一起来看看吧. 我们分以下3种情况来谈这个 ...
- postman里测试文件上传(MultipartFile)
1.后台方法: @Override @PostMapping("/importNumberSpaceData") public DataImportOutDTO importNum ...
- springboot 删除路径下面所有文件_springboot文件上传删除下载
SpringBoot文件上传.删除及下载 最近的项目中,需要将文件保存项目的根目录路径下,特此记录下文件的操作: 文件上传/*** 文件上传(相对路径) * *@paramuploadFile 文件 ...
- fastdfs中浏览器访问获取不到文件_SpringBoot 2.0 开发案例之整合FastDFS分布式文件系统...
原作者:小柒 地址:https://blog.52itstyle.vip/archives/4837/ 前言 最近在做一款图床服务,前面的文章也有提到,之前整合了阿里云 OSS 做图片存储,虽然小批量 ...
- 读取本地文件转化成MultipartFile
介绍 现在有个上传文件功能,需要将文件上传到oss上,但是文件有点多,于是使用接口进行上传.但是需要上传文件转换为MultipartFile类型文件进行上传. 上传文件代码 @RequestMappi ...
- HTTP传递文件和接收文件处理之MultipartFile
1. 什么是MultipartFile? MultipartFile是spring用来处理文件封装的一个接口,继承自InputStreamSource,而InputStreamSource接口中封装了 ...
- Dubbo系统里面MultipartFile文件传输问题Dubbo文件上传/传输服务
今天遇到一个问题,在Controller 层里面,直接使用MultipartFile 来接收上传的图片,遇到几个坑. 一.在spring配置文件里面配置文件上传 <!--文件上传-->&l ...
最新文章
- mysql存储过程导出_Mysql导出存储过程
- 哪些人适合学web前端培训呢
- 一文看懂MYCAT数据库服务器!
- css overflow和border-radius一起用 解决圆角和滚动条一起用的问题
- [云炬创业管理笔记]第五章打磨最有效的商业模式测试1
- C++ : 构造函数,拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符应用场景
- php post aborted,php文件无法得到POST过来的数据
- 计算机硬盘出现过哪些问题,出现这几种征兆, 说明您的电脑机械硬盘可能就有问题了!...
- Linux学习总结(70)——Bash 脚本中常用的内置变量汇总
- Windows域控 批量设置用户下次登录 修改密码【全域策略生效】
- 鼠标移入事件_NSTrackingArea 监听鼠标移入与移出事件
- Linux中,Mysql安装
- virtualbox使用手记
- (丘维声)高等代数课程笔记:商空间
- python差异性分析_差异性分析
- 无线局域服务器架设方法,技巧:如何实现局域网架设BT服务器
- Identification和Verification的区别
- 英语语法(简单句型篇)
- 计算机联锁控制台功能,计算机联锁控制台的改进及应用
- 如何快速将pdf表格转换成excel