本来的写法:客户端
@ApiOperation(value = "融资申请上传文件存储")
@RequestMapping(path = "/b/v1/external/gateway/adapter/aws/object/save", method = RequestMethod.POST)
ResponseEntity<String> objectSave(@ApiParam("融资申请文件") @RequestParam("file") MultipartFile file,
@ApiParam("文件名") @RequestParam("fileName") String fileName,
@ApiParam("客户号") @RequestParam("custCode") String custCode,
@ApiParam("业务类型") @RequestParam("businessType") String businessType,
@ApiParam("文件后缀") @RequestParam("fileType") String fileType,
@ApiParam("上传时间") @RequestParam("uploadDate") String uploadDate);
然后各种报错,不列出了,搞了整整3天。直接帖正确写法
客户端:
@FeignClient(value = "bis-zyhy", configuration = FeignSupportConfig.class)
public interface BisZyhyCommonServiceInvoke {
@ApiOperation(value = "融资申请上传文件存储")
@RequestMapping(path = "/b/v1/external/gateway/adapter/aws/object/save", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
ResponseEntity<String> objectSave(@ApiParam("融资申请文件") @RequestPart("file") MultipartFile file,
@ApiParam("文件名") @RequestParam("fileName") String fileName,
@ApiParam("客户号") @RequestParam("custCode") String custCode,
@ApiParam("业务类型") @RequestParam("businessType") String businessType,
@ApiParam("文件后缀") @RequestParam("fileType") String fileType,
@ApiParam("上传时间") @RequestParam("uploadDate") String uploadDate);
}
添加FeignSupportConfig
package cn.com.fero.configuration;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.cloud.netflix.feign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* feign文件传输配置类
* @author Bingo.Ge
* @date 2021-11-02
*/
@Configuration
public class FeignSupportConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
public SpringFormEncoder feignFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
添加依赖:
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
服务端也要改为@RequestPart
@ApiOperation(value = "保存对象", notes = "")
@RequestMapping(value = "object/save", method = RequetstMethod.POST)
public JsonResponse objectSave(@RequestPart("file") MultipartFile file, @RequestParam String fileName,
@RequestParam String custCode, @RequestParam String businessType, @RequestParam String fileType, @RequestParam String uploadDate) throws IOException {
String objectKey = businessType + "/" + uploadDate + "_" + fileName;
PutObjectResult result = AWSObjectSaveUtils.uploadFileInputStream(custCode, objectKey, file.getInputStream());
Map resultMap = new HashMap();
resultMap.put("serialNo", result.getETag());
log.debug("外部接口-对象存储操作 保存对象 结束");
return JsonResponse.newInstance().setMessage("success").setSuccess(true).setTimestamp(new Date()).setData(resultMap);
}