欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、配置文件解析器

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

依賴:

<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 的寫法:

@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ù)不能超過url長度限制。

三、服務(wù)消費(fè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 接口寫法差不多,注意方法注解和參數(shù)與服務(wù)提供者的 controller 一樣。

Controller 的寫法, Controller 中接收前端傳過來的文件信息和額外參數(shù),然后通過 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)者接收前端(如瀏覽器)傳過來的文件,但是并不進(jìn)行業(yè)務(wù)處理,然后通過 Feign 調(diào)用接口,把文件傳給服務(wù)提供者,服務(wù)提供者拿到文件后,進(jìn)行相應(yīng)的業(yè)務(wù)處理。

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

相關(guān)文章

  • Java使用IO流實(shí)現(xiàn)音頻的剪切和拼接

    Java使用IO流實(shí)現(xiàn)音頻的剪切和拼接

    這篇文章主要為大家詳細(xì)介紹了Java使用IO流實(shí)現(xiàn)音頻的剪切和拼接,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • .properties文件讀取及占位符${...}替換源碼解析

    .properties文件讀取及占位符${...}替換源碼解析

    本篇文章主要介紹了.properties文件讀取及占位符${...}替換源碼解析的相關(guān)知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • MAC 系統(tǒng)如何使用 Sublime Text 2 直接編譯運(yùn)行 java 代碼

    MAC 系統(tǒng)如何使用 Sublime Text 2 直接編譯運(yùn)行 java 代碼

    這篇文章主要介紹了MAC 系統(tǒng)如何使用 Sublime Text 2 直接編譯運(yùn)行 java 代碼,需要的朋友可以參考下
    2014-10-10
  • Java實(shí)現(xiàn)窗體程序顯示日歷表

    Java實(shí)現(xiàn)窗體程序顯示日歷表

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)窗體程序顯示日歷表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java?六類運(yùn)算符詳解

    Java?六類運(yùn)算符詳解

    這篇文章主要介紹了Java?六類運(yùn)算符,在?Java?語言中,運(yùn)算符有算數(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算符、字符串連接運(yùn)算符、條件運(yùn)算符,感興趣的朋友可以閱讀一下
    2023-03-03
  • springmvc+shiro自定義過濾器的實(shí)現(xiàn)代碼

    springmvc+shiro自定義過濾器的實(shí)現(xiàn)代碼

    這篇文章主要介紹了springmvc+shiro自定義過濾器的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • java編寫ftp下載工具

    java編寫ftp下載工具

    本文給大家介紹的是如何一步步實(shí)現(xiàn)使用java編寫FTP下載工具,而且是在Linux環(huán)境下使用javac編譯的,在運(yùn)行和編譯上有些不同之處,有需要的小伙伴們參考下吧。
    2015-03-03
  • Java調(diào)用瀏覽器打開網(wǎng)頁完整實(shí)例

    Java調(diào)用瀏覽器打開網(wǎng)頁完整實(shí)例

    這篇文章主要介紹了Java調(diào)用瀏覽器打開網(wǎng)頁的方法,以完整實(shí)例形式分析了java打開網(wǎng)頁的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Mybatis-plus通過添加攔截器實(shí)現(xiàn)簡單數(shù)據(jù)權(quán)限

    Mybatis-plus通過添加攔截器實(shí)現(xiàn)簡單數(shù)據(jù)權(quán)限

    系統(tǒng)需要根據(jù)用戶所屬的公司,來做一下數(shù)據(jù)權(quán)限控制,具體一點(diǎn),就是通過表中的company_id進(jìn)行權(quán)限控制,項目使用的是mybatis-plus,所以通過添加攔截器的方式,修改查詢sql,實(shí)現(xiàn)數(shù)據(jù)權(quán)限,本文就通過代碼給大家詳細(xì)的講解一下,需要的朋友可以參考下
    2023-08-08
  • Spring中的singleton和prototype的實(shí)現(xiàn)

    Spring中的singleton和prototype的實(shí)現(xiàn)

    這篇文章主要介紹了Spring中的singleton和prototype的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論