1、文件上传服务的pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.strive</groupId>
<artifactId>eureka-client-fileupload</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-client-fileupload</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-actuator</artifactId>-->
<!--<!–客户端只有当我们有了这个依赖之后,才能有那些状态页面的查看,否则会报ErrorPage–>-->
<!--</dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2、application.yml
server:
port: 8604
spring:
application:
name: eureka-client-fileupload
servlet: #注意这块是servlet,之前的http已经被弃用,设置http相当于没有设置
multipart:
max-file-size: 500MB
max-request-size: 1000MB
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
# healthcheck:
# enabled: true
instance:
prefer-ip-address: true
3、启动类
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientFileuploadApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientFileuploadApplication.class, args);
}
}
4、 上传代码
@RestController
public class HomePageController {
@RequestMapping("/fileUpload")
public String fileUpload(MultipartFile file){
if(file.isEmpty()){
return "false";
}
String fileName = file.getOriginalFilename();
int size = (int) file.getSize();
System.out.println(fileName + "-->" + size);
String path = "E:/test" ;
File dest = new File(path + "/" + fileName);
if(!dest.getParentFile().exists()){ //判断文件父目录是否存在
dest.getParentFile().mkdir();
}
try {
file.transferTo(dest); //保存文件
return dest.getAbsolutePath();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "false";
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "false";
}
}
}
5、zuul的代码和上篇zuul的最基本的配置相同
6、请求示例:
(1)上传小文件
(2)上传大文件(报错)
更改请求,大文件请求在/zuul/**的后面,用以绕过Spring DispatcherServlet的处理(用以避免多次处理)
结果报错TimeOut,这是因为文件过大,请求事件过长,Hystrix被调用返回了,所以我们在zuul中配置
spring:
application:
name: eureka-client-zuul
server:
port: 8601
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
ribbon:
ConnectTimeout: 3000
ReadTimeout: 60000
logging:
level:
com.netflix: debug
再次请求:
文件上传成功