項目中用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);
}
問題沒了
