• SpringCloud和SpringBoot在调Feign传文件时的异常汇总及解决办法


    主要记录SpringCloud在调Feign传文件时的问题:

    1.(按注意点2改正即可)

    Current request is not a multipart request(按注意点2改正即可)

    2.(按注意点3处理即可)

     The field files exceeds its maximum permitted size of 1048576 bytes.(按注意点3处理即可)

    注意点1:

    如果你的A服务(调用端)和B服务(被调用端)不在一个服务器上(分布式服务),请不要使用以下方式(不要直接将java.io.file作为参数传递);否则会发现file只有文件名,path等属性,但实际大小为0kb(原理:是以path作为file根传递的,如果不是一个服务器,就会有坑,如果在一个服务器上理论上是没问题的,由于我的项目是分布式,所以这里我这里没尝试)

    1. @PostMapping(value="/upload_feign")
    2. public AjaxResult upload_feign(@RequestParam(value = "file") File file) ;

    注意点2:报Current request is not a multipart request

    分布式使用Feign传文件时正确姿势:

    2.1被调用端feigh:

    1. @PostMapping(value="/_upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    2. public AjaxResult upload(@RequestPart(value = "file") MultipartFile file) ;

    2.2被调用端feigh的指向(被调用端业务代码):

    1. @PostMapping(value="/_upload_",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    2. public AjaxResult _upload_(@RequestPart(value = "file") MultipartFile file, ) throws Exception {
    3. //具体业务************
    4. return "";
    5. }

    2.3调用端

     remoteService._upload_(multipartFile);

    注意点3:如果以上改正完毕报错: The field files exceeds its maximum permitted size of 1048576 bytes

    3.1启动类新增以下内部类:

    1. public class Application {
    2. public static void main(String[] args) {
    3. SpringApplication.run(WmsApplication.class, args);
    4. }
    5. @Bean
    6. public MultipartConfigElement multipartConfigElement() {
    7. MultipartConfigFactory factory = new MultipartConfigFactory();
    8. //允许上传的文件最大值
    9. factory.setMaxFileSize( DataSize.parse("102400KB")); //KB,MB
    10. /// 设置总上传数据总大小
    11. factory.setMaxRequestSize(DataSize.parse("102400KB"));
    12. return factory.createMultipartConfig();
    13. }

    3.2配置application.yml新增以下节点:

    1. spring:
    2. servlet:
    3. multipart:
    4. max-file-size: 100MB
    5. max-request-size: 100MB

    然后调用结果成功如下:

     以上我已亲测,记录不易转载请注明出处。

  • 相关阅读:
    一位3年经验的测试工程师水平能差到什么程度?面试后,感叹都是人才呀...
    C++:多态
    flutter报错: library “libflutter.so“ not found
    【JS高级】js面向对象三大特性之封装—如何创建对象_05
    Centos - 虚拟机初始化网络配置
    计算机网络练习带答案
    【Autopsy数字取证篇】Autopsy案例分析报告导出
    怎样用一台电脑一个网卡访问多个网段(超级简单)
    【2022PMP最全总结-从报名、考试、成绩结果(3A)一条龙教程】
    今天面了个腾讯拿38K出来的大佬,让我见识到了基础的天花板
  • 原文地址:https://blog.csdn.net/gaoduicai/article/details/127907891