我上传文件的目录是与项目同一级目录,也就是说在开发阶段,文件会在与src同级的目录下生成file文件,打成jar包后,会在jar包所在的目录下生成file文件
文件返回路径名称为uuid+扩展名
yaml
#文件上传路径
spring:
servlet:
multipart:
# 上传文件大小设置
enabled: true #是否启用http上传处理
max-request-size: 1024MB #最大请求文件的大小
max-file-size: 1024MB #设置单个文件最大长度
file:
#虚拟路径,对外展示
staticAccessPath: /xxx/file/**
# 上传路径
fileupload: /file/
Controller
@RestController
@RequestMapping("/xxxxx")
public class FileUploadController {
@Value("${file.fileupload}")
String fileupload;
@ApiOperation("文件上传")
@PostMapping("upload")
public String upload(@RequestParam("file") MultipartFile uploadFile) {
//获取项目所在位置
//本地项目
//Path path = Paths.get("");
//String parentPathString = path.toAbsolutePath().toString();
//System.out.println(parentPathString);
//linux项目
ApplicationHome ah = new ApplicationHome(getClass());
File parentPathString = ah.getSource().getParentFile();
//创建文件
File file = new File(parentPathString+fileupload);
if (!file.exists()){
file.mkdirs();
}
//获取文件名
String filename = uploadFile.getOriginalFilename();
filename = filename.substring(filename.lastIndexOf("."));
String uuid= UUID.randomUUID().toString().replace("-", "");
filename=uuid+filename;
try {
//导入文件
uploadFile.transferTo(new File(parentPathString+fileupload,filename));
} catch (IOException e) {
e.printStackTrace();
}
return fileupload+filename;
}
}
Configuration
@Configuration
public class FileUploadConfig extends WebMvcConfigurationSupport {
@Value("${file.staticAccessPath}")
String staticAccessPath;
@Value("${file.fileupload}")
String fileupload;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//获取项目所在位置
Path path = Paths.get("");
String parentPathString = path.toAbsolutePath().toString();
// 访问路径 图片本地地址
registry.addResourceHandler(staticAccessPath).addResourceLocations("file:"+parentPathString+fileupload);
//这两个是配置swagger的,如果项目使用了swagger就需要配置,否则无法使用swagger
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/","classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/","classpath:/META-INF/resources/webjars/");
}
}
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
特别注意
linux上文件有权限,我们需要把你项目的当前目录的文件权限改为可写的。具体怎么改网上有很多资料,在此就不再赘述了。