spring cloud feign client 上传文件遇到问题记录

项目中用FeignClient上传文件时,发现大小无法大于1M,代码如下:

MultiValueMap<String, String> requestMap = new LinkedMultiValueMap<String, String>();OptUploadFileByteInfoReqDto optUploadFileByteInfoReqDto = new OptUploadFileByteInfoReqDto();optUploadFileByteInfoReqDto.setFileByteArray(file.getBytes());optUploadFileReqDto.setUploadFileByteInfoReqDto(optUploadFileByteInfoReqDto);requestMap.add("file", JSON.toJSONString(optUploadFileReqDto));

// TODO 待修改,增加loginAuthDtoresponse = opcRpcService.uploadFile(file, null);
------------------------------

@Transactional(rollbackFor = Exception.class)public OptUploadFileRespDto uploadFile(MultiValueMap<String, String> requestMap, LoginAuthDto loginAuthDto) {   Wrapper<OptUploadFileRespDto> response = opcOssFeignApi.uploadFile(requestMap);   log.info("----- 上传文件响应:{}", response);   if (response != null && response.success()) {      OptUploadFileRespDto result = response.getResult();      MdcAttachment mdcAttachment = new MdcAttachment();      mdcAttachment.setAttachmentNo(result.getRefNo());      mdcAttachment.setBucketName(result.getAttachmentPath());      mdcAttachment.setRefNo(result.getRefNo());      mdcAttachment.setName(result.getAttachmentName());      mdcAttachment.setPath(result.getAttachmentUrl());      mdcAttachment.setType(result.getFileType());      mdcAttachment.setFormat(result.getFileType());      // TODO 待修改,去除非空判断      mdcAttachment.setCreator(loginAuthDto != null ? loginAuthDto.getLoginName() : null);      mdcAttachment.setCreatorId(loginAuthDto != null ? loginAuthDto.getAccountId() : null);      mdcAttachment.setCreatedTime(LocalDateTime.now());      mdcAttachment.setUpdateTime(LocalDateTime.now());      mdcAttachmentMapper.insertSelective(mdcAttachment);      result.setAttachmentId(mdcAttachment.getId());      return result;   }   return null;}
------------------------------
public class OpcAttachmentFeignClient extends BaseController implements OpcOssFeignApi {
 @Resource
    private OpcAttachmentService opcAttachmentService;
    @Resource
    private OpcAliOssService opcAliOssService;

    @Override
    @ApiOperation(httpMethod = "POST", value = "上传文件")
    public Wrapper<OptUploadFileRespDto> uploadFile(MultiValueMap<String, String> requestMap) {
        OptUploadFileReqDto optUploadFileReqDto = JSON.parseObject(requestMap.getFirst("file"),
                OptUploadFileReqDto.class);
        String fileType = optUploadFileReqDto.getFileType();
        String fileName = LocalDateTime.now().format(DateUtil.DATE_FORMAT_30) + RandomUtil.createNumberCode(4) + "."
                + fileType;

        OptUploadFileRespDto optUploadFileRespDto = null;
        try {
            optUploadFileRespDto = opcAliOssService
                    .uploadFile(optUploadFileReqDto.getUploadFileByteInfoReqDto().getFileByteArray(), fileName);
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("上传文件发生异常:{}", e.getMessage());
            return WrapMapper.error("上传文件发生异常");
        }
        if (optUploadFileRespDto != null) {
            optUploadFileRespDto.setFileType(fileType);
        }
        return WrapMapper.ok(optUploadFileRespDto);
    }

当文件>1M时,被调用的uploadFile方法的requestMap就变成空了,原因不明。

于是换了种写法:

    @Transactional(rollbackFor = Exception.class)
    public OptUploadFileRespDto uploadFile(MultipartFile file, LoginAuthDto loginAuthDto) {

        Wrapper<OptUploadFileRespDto> response = opcOssFeignApi.handleFileUpload(file);
        log.info("----- 上传文件响应:{}", response);
        if (response != null && response.success()) {
            OptUploadFileRespDto result = response.getResult();-------------
@Overridepublic Wrapper<OptUploadFileRespDto> handleFileUpload(@RequestPart(value = "file") MultipartFile file) {   String fileType = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);   String fileName = LocalDateTime.now().format(DateUtil.DATE_FORMAT_30) + RandomUtil.createNumberCode(4) + "."         + fileType;   OptUploadFileRespDto optUploadFileRespDto = null;   try {      optUploadFileRespDto = opcAliOssService            .uploadFile(file.getBytes(), fileName);   } catch (IOException e) {      e.printStackTrace();      logger.error("上传文件发生异常:{}", e.getMessage());      return WrapMapper.error("上传文件发生异常");   }   if (optUploadFileRespDto != null) {      optUploadFileRespDto.setFileType(fileType);   }   return WrapMapper.ok(optUploadFileRespDto);}

问题没了

原文地址:https://www.cnblogs.com/zjhgx/p/12207387.html

时间: 2024-08-24 09:20:23

spring cloud feign client 上传文件遇到问题记录的相关文章

Spring 中Apache Commons上传文件

在用Apache Commons完成文件上传功能需有的几步: 1.导入两个架包:commons-fileupload.jar和commons-io.jar maven中: 1 <dependency> 2 <groupId>commons-fileupload</groupId> 3 <artifactId>commons-fileupload</artifactId> 4 <version>1.3</version> 5

Spring Cloud Feign Client 实现MultipartFile上传文件功能

这两天老大突然交给一个任务,就是当用户关注我们的微信号时,我们应该将其微信头像下载下来,然后上传到公司内部的服务器上.如果直接保存微信头像的链接,当用户更换微信头像时,我们的产品在获取用户头像很可能会出现404异常. 由于公司运用的技术栈为spring Cloud(一些Eureka, Feign)进行服务注册和远程调用. 重点来了....但直接使用FeignClient去远程调用注册中心上的上传文件接口,会一直报错. @PostMapping    @ApiOperation(value = "

【Spring Boot】关于上传文件例子的剖析

目录 Spring Boot 上传文件 功能实现 增加ControllerFileUploadController 增加ServiceStorageService 增加一个Thymeleaf页面 修改一些简单的配置application.properties 修改Spring Boot Application类 官网没有说明其他的Service类的定义 至此,运行项目.可以再上传与下载文件 介绍@ConfigurationProperties的用法 上面例子的 @ConfigurationPro

Spring Boot 使用 ServletFileUpload上传文件失败,upload.parseRequest(request)为空

使用Apache Commons FileUpload组件上传文件时总是返回null,调试发现ServletFileUpload对象为空,在Spring Boot中有默认的文件上传组件,在使用ServletFileUpload时需要关闭Spring Boot的默认配置 , 禁用MultipartResolverSpring提供的默认值 1.0在配置文件中添加 spring.http.multipart.enabled=false 2.0在配置文件中添加 spring.servlet.multip

关于上传文件的一些记录

插件:jquery.form.js 上传文件. <input type="file" name="file" class="layui-upload-file" placeholder="上传文件"> js: $('input').change(function(){ console.log($(this).val()); //获取文件名 console.log(this.files[0]); //获取的比较详细,

springboot(十七):使用Spring Boot上传文件

上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例. 1.pom包配置 我们使用Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0. <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>

Spring Boot上传文件

我们使用Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0. <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <properties

Spring Boot(十七):使用 Spring Boot 上传文件

上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例. 1.pom 包配置 我们使用 Spring Boot 版本 2.1.0.jdk 1.8.tomcat 8.0. <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId&

JSP-超大文件上传-如何上传文件-大文件上传

我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小限制,post没有) 2.表单的enctype属性:必须设置为multipart/form-data. 3.表单必须有文件上传项:file,且文件项需要给定name值 上传文件夹需要增加一个属性webkitdirectory,像这样: <input id="fileFolder" n