1. 程式人生 > >Spring Cloud Feign的檔案上傳實現

Spring Cloud Feign的檔案上傳實現

在Spring Cloud封裝的Feign中並不直接支援傳檔案,但可以通過引入Feign的擴充套件包來實現,本來就來具體說說如何實現。

服務提供方(接收檔案)

服務提供方的實現比較簡單,就按Spring MVC的正常實現方式即可,比如:

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Application {

    @RestController
    public class UploadController {

        @PostMapping(value = "/uploadFile"
, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String handleFileUpload(@RequestPart(value = "file") MultipartFile file) { return file.getName(); } } public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true
).run(args);
} }

服務消費方(傳送檔案)

在服務消費方由於會使用Feign客戶端,所以在這裡需要在引入feign對錶單提交的依賴,具體如下:

<dependency>
   <groupId>io.github.openfeign.form</groupId>
   <artifactId>feign-form</artifactId>
   <version>3.0.3</version>
</dependency>
<dependency>
   <groupId>
io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency>

定義檔案上傳方的應用主類和FeignClient,假設服務提供方的服務名為eureka-feign-upload-server

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}

@FeignClient(value = "upload-server", configuration = UploadService.MultipartSupportConfig.class)
public interface UploadService {

    @PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String handleFileUpload(@RequestPart(value = "file") MultipartFile file);

    @Configuration
    class MultipartSupportConfig {
        @Bean
        public Encoder feignFormEncoder() {
            return new SpringFormEncoder();
        }
    }

}

在啟動了服務提供方之後,嘗試在服務消費方編寫測試用例來通過上面定義的Feign客戶端來傳檔案,比如:

@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UploadTester {

    @Autowired
    private UploadService uploadService;

    @Test
    @SneakyThrows
    public void testHandleFileUpload() {

        File file = new File("upload.txt");
        DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",
                MediaType.TEXT_PLAIN_VALUE, true, file.getName());

        try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()) {
            IOUtils.copy(input, os);
        } catch (Exception e) {
            throw new IllegalArgumentException("Invalid file: " + e, e);
        }

        MultipartFile multi = new CommonsMultipartFile(fileItem);

        log.info(uploadService.handleFileUpload(multi));
    }

}

完整示例:

讀者可以根據喜好選擇下面的兩個倉庫中檢視eureka-feign-upload-servereureka-feign-upload-client兩個專案:

相關推薦

spring-cloud-zuul檔案中文名亂碼解決過程

       由於專案中用到了zuul作為閘道器,所有的請求都要經過zuul轉發,因此上傳請求也被代理了。經過辛辛苦苦的敲程式碼,終於完成了功能開發,上傳非中文名的檔案一切都很完美,可是到了中文檔名時,檔案伺服器收到的請求裡面中文名全部變成了 ‘?’ ,我也是有很多疑問了,同

Spring Cloud Feign檔案實現

在Spring Cloud封裝的Feign中並不直接支援傳檔案,但可以通過引入Feign的擴充套件包來實現,本來就來具體說說如何實現。服務提供方(接收檔案)服務提供方的實現比較簡單,就按Spring MVC的正常實現方式即可,比如:@EnableFeignClients @E

Java架構-Spring mvc+oss儲存+fileupload多檔案實現SSO單點登入模板管理

之前給大家介紹了sso的相關知識點和整合方案,考慮到每個系統所屬行業的不同,這邊針對於不同行業做了一些統一的sso單點登入介面模板,使用fileupload多檔案上傳+OSS阿里雲端儲存方案。 1. 阿里雲oss儲存Utils Java程式碼 2. 阿里雲配

spring mvc檔案實現進度條

    檔案上傳應該大部分人都接觸過,一般都是基於commons-fileupload元件來實現,SpringMVC的檔案上傳功能也是在commons-fileupload元件提供的功能上面做了一些包裝功能,使檔案上傳開發更容易方便。      看下上傳效果圖:  

Spring 中的檔案與下載控制

先建立根應用上下文配置,WebDemo/src/main/java/com/seliote/webdemo/config/RootContextConfig.java package com.seliote.webdemo.config; import org.springframework.c

Spring mvc uploadifive 檔案實踐(轉自 https //segmentfault com/a/

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

spring boot Tomcat檔案找不到零時資料夾

springboot專案上傳檔案是找不到零時資料夾 1、本身啟動jar包時內建Tomcat沒有建立零時資料夾 2、在zuul閘道器級別沒有建立零時資料夾 處理方案: -Djava.io.tmpdir=/home/tomcat/upload/tmp eg: java -Xms1024m -X

Spring MVC中檔案和下載

檔案上傳 檔案上傳需將表格的提交方式設為"POST",並且將enctype設為"multipart/form-data",以二進位制的方式提交資料。 spring mvc中可通過MultipartResolver監聽每個請求,如有上傳的檔案,則把請求封裝為MultipartH

spring boot之檔案

檔案上傳的路徑可以在application的配置檔案中配置和獲取,當檔案上傳到本地時,此時檔案是不允許直接訪問的。需要在spring boot中新增配置類(配置檔案的路徑是file.root.path=D:/file/)。 @SuppressWarnings("deprec

springcloud中feign檔案、下載

檔案上傳、下載也是實際專案中會遇到的場景,本篇我們介紹下springcloud中如何使用feign進行檔案上傳與下載 。  還是使用feign 進行http的呼叫。 一、Feign檔案上傳 服務提供方java程式碼: /** * 檔案上傳 * @param fil

spring boot 簡單檔案 返回

首先檔案要有存放的地方 在application.yml中配置 spring: servlet: multipart: location: /Users/chenweiqi/IdeaProjects/mq/temp/file controller中接收,儲存檔

spring mvc的檔案操作

第一步:在springmvc中配置multipart型別解析器 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver

Spring MVC 的檔案和下載

“君看一葉舟,出沒風波里” 使用Spring MVC 進行檔案的上傳和下載,除了Spring MVC 的jar包之外,還需用到commons-fileupload-1.2.2.jar、commons-io-2.1.jar兩個包。這裡已給出下載地址:jar包下載地

Spring Test之檔案

Spring Test之檔案上傳篇 1、上傳需要的簡單配置 1.1 匯入依賴包,包含檔案上傳、springtest4+和Junit4+包 <dependency> <groupId>org.springframework</groupId&

[原始碼和文件分享]基於WinInet的HTTPS檔案實現

背景 之前寫過基於WinInet的HTTPS檔案下載功能的小程式了,那就順便把HTTPS檔案上傳也一併寫了吧,這樣知識才算是比較完整了。相對於檔案下載來說,檔案上傳過程原理也都差不多,只要注意些區別就好了。 現在,把基於WinInet的HTTPS檔案上傳功能小程式的開發過程分享給大家,方便大

使用Spring Boot搭建檔案服務

一:服務端 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x

基於spring boot ftp檔案

對ftp檔案上傳將行封裝,實現連線的單例模式,完成執行緒安全的改進,ftp檔案上傳下載失敗的重試。application.yml配置檔案ftp:    ip: 127.0.0.1    port: 21    username: admin    password: admi

Spring MVC 中檔案/刪除 刪除空資料夾方法 + 下載方法

package com.pqs.common.tools; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOExce

java web 檔案實現

使用jspsmart完成檔案上傳 用於向伺服器上傳的表單 <%@ page contentType="text/html;charset=UTF-8" language="ja

Thinkphp5+uploadify 檔案實現

初次接觸伺服器端開發,邊學習邊試著做一個OTA後臺伺服器,費了好大勁才實現了檔案上傳和進度條顯示。 遇到幾個問題: 1. 大檔案上傳失敗 2.上傳取消X 符合顯示不出來 3. 不知道如何傳遞變數值給後臺php 記錄下過程。 1. 下載uploadify 程式碼到工程裡,如p