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 待修改,增加loginAuthDto
response = 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();
-------------
@Override
public 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);
}
复制代码

问题没了

posted @   zjhgx  阅读(1016)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示