大家好,因为近期做需求中遇到了文件上传这个东西,而且我这个还是跨服务去传输文件的所以我这边使用了httpclient和RestTemplate去做,但是最后还是用的httpclientfeign和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文件跨服务相关推荐

  1. springboot并发上传文件_springboot实现单文件和多文件上传

    本文实例为大家分享了springboot实现单文件/多文件上传的具体代码,供大家参考,具体内容如下 package com.heeexy.example.controller; import com. ...

  2. springboot读取src下文件_springboot 下载模板文件 加载classpath文件路径(示例代码)...

    项目需要下载导入模板,springboot使用如下下载方式可解决问题: /** * 导入模板下载 * @param req * @param resp * @param context * @retu ...

  3. form表单上传文件_SpringBoot中如何使用SpringMVC上传文件?

    今天我们要说的这个话题很简单,不要问为啥,因为SpringBoot,哈哈.现在SpringBoot可以说人人都会用了,它的好处是显而易见的,大大的简化了配置,一起来看看吧. 我们分以下3种情况来谈这个 ...

  4. postman里测试文件上传(MultipartFile)

    1.后台方法: @Override @PostMapping("/importNumberSpaceData") public DataImportOutDTO importNum ...

  5. springboot 删除路径下面所有文件_springboot文件上传删除下载

    SpringBoot文件上传.删除及下载 最近的项目中,需要将文件保存项目的根目录路径下,特此记录下文件的操作: 文件上传/*** 文件上传(相对路径) * *@paramuploadFile 文件 ...

  6. fastdfs中浏览器访问获取不到文件_SpringBoot 2.0 开发案例之整合FastDFS分布式文件系统...

    原作者:小柒 地址:https://blog.52itstyle.vip/archives/4837/ 前言 最近在做一款图床服务,前面的文章也有提到,之前整合了阿里云 OSS 做图片存储,虽然小批量 ...

  7. 读取本地文件转化成MultipartFile

    介绍 现在有个上传文件功能,需要将文件上传到oss上,但是文件有点多,于是使用接口进行上传.但是需要上传文件转换为MultipartFile类型文件进行上传. 上传文件代码 @RequestMappi ...

  8. HTTP传递文件和接收文件处理之MultipartFile

    1. 什么是MultipartFile? MultipartFile是spring用来处理文件封装的一个接口,继承自InputStreamSource,而InputStreamSource接口中封装了 ...

  9. Dubbo系统里面MultipartFile文件传输问题Dubbo文件上传/传输服务

    今天遇到一个问题,在Controller 层里面,直接使用MultipartFile 来接收上传的图片,遇到几个坑. 一.在spring配置文件里面配置文件上传 <!--文件上传-->&l ...

最新文章

  1. mysql存储过程导出_Mysql导出存储过程
  2. 哪些人适合学web前端培训呢
  3. 一文看懂MYCAT数据库服务器!
  4. css overflow和border-radius一起用 解决圆角和滚动条一起用的问题
  5. [云炬创业管理笔记]第五章打磨最有效的商业模式测试1
  6. C++ : 构造函数,拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符应用场景
  7. php post aborted,php文件无法得到POST过来的数据
  8. 计算机硬盘出现过哪些问题,出现这几种征兆, 说明您的电脑机械硬盘可能就有问题了!...
  9. Linux学习总结(70)——Bash 脚本中常用的内置变量汇总
  10. Windows域控 批量设置用户下次登录 修改密码【全域策略生效】
  11. 鼠标移入事件_NSTrackingArea 监听鼠标移入与移出事件
  12. Linux中,Mysql安装
  13. virtualbox使用手记
  14. (丘维声)高等代数课程笔记:商空间
  15. python差异性分析_差异性分析
  16. 无线局域服务器架设方法,技巧:如何实现局域网架设BT服务器
  17. Identification和Verification的区别
  18. 英语语法(简单句型篇)
  19. 计算机联锁控制台功能,计算机联锁控制台的改进及应用
  20. 如何快速将pdf表格转换成excel

热门文章

  1. 【转载】那么明亮的sz4j
  2. 获得磁盘的飞鸽传书描述信息
  3. 调整的飞秋官网幅度还非常的大
  4. google的一些秘密入口
  5. 利用pre-compiled headers技术以加速编译速度(一)
  6. 三十五岁后,如何自学WEB前端编程
  7. 双十一!!作为程序员的你该如何拥有个人服务器和域名呢?
  8. javascript的事件绑定与事件委托
  9. pdf转word python_Python实现PDF转Word
  10. 一套完整的基于随机森林的机器学习流程(特征选择、交叉验证、模型评估))...