上传时如何修改MultipartFile的参数名称?

时间:2018-10-24 01:49:11

标签: java spring multipartform-data spring-cloud-feign

我需要通过自己的后端服务将MultipartFile上传到第三方服务。分段形式的参数为“ nameA”,但第三方服务需要其参数名称为“ nameB”。

通常我可以通过两种方式解决它:

  1. 将前端的参数名称更改为“ nameB”
  2. 在后端服务中将MultipartFile的参数名称更改为“ nameB”。

但是我现在不能更改前端,因此我想指出如何在后端服务中修改MultipartFile的参数名称。

后端服务的控制者是:

@PostMapping("/url")
public Response method(@RequestParam("nameA") MultipartFile file) {
    return Service.method(file);
}

在Feign Client中用于将文件上传到第三方服务:

@PostMapping(value = "/url1/url2", consumes = MULTIPART_FORM_DATA_VALUE)
Response method(@RequestParam("nameB") MultipartFile file);

但是,在@RequestParam中使用指定参数的方法无效。

那么有人知道如何修改MultipartFile的参数名称吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

这与您的控制器的Spring注释完全无关,而是取决于您如何将该文件上传到第三方服务。既然您提到了上传,我假设您需要在后端服务中创建一个新的HTTP多部分请求,该请求会将文件上传到第三方服务。创建该请求时,您将能够指定多部分的名称。

答案 1 :(得分:0)

您可以根据需要在FeignClient中设置MultipartFile的名称,这是我的项目中的示例:

ontroller API(接收方):

@RestController
@RequestMapping("/files")
public class FilesController {    

    @PostMapping(path = "/upload")
    @ResponseStatus(HttpStatus.CREATED)
    public FileDescriptor upload(@RequestPart(value = "data") MultipartFile multipartFile) {
       ...
    }
}

假冒客户(发送方):

@FeignClient(value = "file-service", configuration = FeignConfig.class)
public interface ContentStorageFeign {

    @ResponseBody
    @PostMapping(value = "/files/upload", produces = MediaType.APPLICATION_JSON_VALUE)
    FileDescriptor create(@RequestPart(value = "data") MultipartFile multipartFile);
}

这是我的FeignConfig:

@Configuration
public class FeignConfig {

    @Bean
    public Decoder decoder(ObjectFactory<HttpMessageConverters> messageConverters) {
        return new ResponseEntityDecoder(new SpringDecoder(messageConverters));
    }

    @Bean
    public Encoder encoder(ObjectFactory<HttpMessageConverters> messageConverters) {
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }
}

但是如果您需要创建一个新请求(从某处收到的文件)并在发送之前重命名此文件,这是另一个问题。