1.依赖的pom.xml
<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> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency>
2.上传文件配置
import feign.codec.Encoder; import feign.form.spring.SpringFormEncoder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FeignMultipartSupportConfig { @Bean public Encoder feignFormEncoder() { return new SpringFormEncoder(); } }
3.编写服务接口
import feign.Response; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.multipart.MultipartFile; @FeignClient(name = "kodbox", url = "http://localhost:80/kodbox.1.13/index.php") public interface FileService { //上传文件 @RequestMapping(value="explorer/upload/fileUpload",method= RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) String fileupload(@RequestParam String path, @RequestParam String name, @RequestPart(name = "file")MultipartFile file, @RequestParam String accessToken );
}
4.添加注解@EnableFeignClients
@SpringBootApplication @EnableFeignClients public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
5.测试
import feign.Response; import org.apache.http.entity.ContentType; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; import java.io.*; @SpringBootTest class DemoApplicationTests { @Autowired private FileService fileService; //上传文件测试 @Test void contextLoads() { File file = new File("C:\\test.txt"); try { FileInputStream fileInputStream = new FileInputStream(file); MultipartFile multipartFile = new MockMultipartFile("file",file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(),fileInputStream); System.out.println(multipartFile.getBytes()); String result = fileService.fileupload("{source:23}","test.txt",multipartFile, "be36LAtDOHnpLrGnqtG3RMXJoBcWAjoFyTqdfVLeeUTHdmkhO4dffRzmNepdq2IzGR1GIHWUZOTSfbcQGw"); System.out.println(result); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }