最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Cloud Feign文件傳輸?shù)氖纠a

 更新時(shí)間:2018年06月02日 10:09:08   作者:cipher  
微服務(wù)中通常使用 Feign 作為服務(wù)消費(fèi)者,那么如何使用 Feign 接口傳輸文件呢?這篇文章主要介紹了Spring Cloud Feign文件傳輸?shù)氖纠a,感興趣的小伙伴們可以參考一下

一、配置文件解析器

服務(wù)提供者和消費(fèi)者都需要配置文件解析器,這里使用 commons-fileupload 替換原有的解析器:

依賴(lài):

<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.1</version>
</dependency>

注入 bean :

@Bean(name = "multipartResolver")
public MultipartResolver mutipartResolver(){
  CommonsMultipartResolver com = new CommonsMultipartResolver();
  com.setDefaultEncoding("utf-8");
  return com;
}

程序入口中剔除原有的解析器:

@SpringBootApplication(exclude = {MultipartAutoConfiguration.class})

二、服務(wù)提供者,即接收文件一方的配置

Controller 的寫(xiě)法:

@ResponseBody
@RequestMapping(value = "/upload", method = {RequestMethod.POST},
        produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},
        consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Result<String> uploadFile(@RequestPart("file")MultipartFile file,
@RequestParam("id")Long id){
  String fileName = file.getOriginalFilename();
  String extend = FileOperateUtil.suffix(fileName);
  FileOperateUtil.copy("E:\\" + fileName, file);
  return ResultBuilder.success("ok");
}

@RequestPart 指定文件,后面的 @RequestParam 是額外參數(shù),注意額外參數(shù)不能超過(guò)url長(zhǎng)度限制。

三、服務(wù)消費(fèi)者配置

依賴(lài):

<dependency>
  <groupId>io.github.openfeign.form</groupId>
  <artifactId>feign-form-spring</artifactId>
  <version>3.2.2</version>
</dependency>
<dependency>
  <groupId>io.github.openfeign.form</groupId>
  <artifactId>feign-form</artifactId>
  <version>3.2.2</version>
</dependency>

文件編碼配置:

import feign.codec.Encoder;
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;

@Configuration
public class MultipartSupportConfig{

  @Autowired
  private ObjectFactory<HttpMessageConverters> messageConverters;

  @Bean
  public Encoder feignFormEncoder(){
    return new SpringFormEncoder(new SpringEncoder(messageConverters));
  }

}

Feign 接口定義:

@FeignClient(name = "test-upload")
public interface UploadService{

  @ResponseBody
  @RequestMapping(value = "/upload", method = {RequestMethod.POST},
      produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},
      consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  Result<String>uploadFile(@RequestPart("file")MultipartFile file,
@RequestParam("id")Long id);

}

與普通 Feign 接口寫(xiě)法差不多,注意方法注解和參數(shù)與服務(wù)提供者的 controller 一樣。

Controller 的寫(xiě)法, Controller 中接收前端傳過(guò)來(lái)的文件信息和額外參數(shù),然后通過(guò) Feign 接口傳輸?shù)竭h(yuǎn)端:

// 注入 feign 接口
@Autowired
private UploadService uploadService;

@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
@ResponseBody
public Result<String> testUpload(HttpServletRequest request, Long id){
  Result<String> result = null;
  MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
  Map<String, MultipartFile> fileMap = mRequest.getFileMap();
  for (MultipartFile mFile : fileMap.values()) {
    String fileName = mFile.getOriginalFilename();
    result = uploadService.uploadFile(mFile, id);
  }
  return result;
}

四、總結(jié)

最后梳理一下流程,服務(wù)消費(fèi)者接收前端(如瀏覽器)傳過(guò)來(lái)的文件,但是并不進(jìn)行業(yè)務(wù)處理,然后通過(guò) Feign 調(diào)用接口,把文件傳給服務(wù)提供者,服務(wù)提供者拿到文件后,進(jìn)行相應(yīng)的業(yè)務(wù)處理。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

宁阳县| 杭锦旗| 阿拉善左旗| 乳山市| 咸阳市| 合作市| 巴塘县| 望奎县| 嘉义县| 合作市| 绥德县| 休宁县| 仲巴县| 仙游县| 永德县| 和顺县| 邹城市| 乐至县| 苗栗市| 洪泽县| 资源县| 同德县| 昌江| 长治县| 启东市| 岳阳县| 昌宁县| 佛学| 平泉县| 繁峙县| 汪清县| 宜黄县| 富阳市| 礼泉县| 黄梅县| 阿坝| 全州县| 车险| 湘乡市| 南靖县| 红桥区|