本文实例为大家分享了Spring boot实现上传文件到本地服务器的具体代码,供大家参考,具体内容如下
引入配置
UploadFileConfig类
@Configuration
public class UploadFileConfig {
@Value("${file.uploadFolder}")
private String uploadFolder;
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation(uploadFolder);
//文件最大
factory.setMaxFileSize("20MB");
return factory.createMultipartConfig();
}
}
UploadFilePathConfig类
@Configuration
public class UploadFilePathConfig extends WebMvcConfigurerAdapter {
@Value("${file.staticAccessPath}")
private String staticAccessPath;
@Value("${file.uploadFolder}")
private String uploadFolder;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + uploadFolder);
}
}
在application.properties加上传的配置项
#文件服务本地rest请求对外地址
file.staticAccessPath=/upload/**
#文件上传目录(注意Linux和Windows上目录结构不同)需要改成你自己的实际目录
file.uploadFolder=/Users/leichunhong/Documents/hlp/zx/
#上传文件本地域名 改写成你后端服务的地址和端口
file.upload.nama=http://127.0.0.1:9090
#springBOOt上传文件大小
# 单个文件的最大值
spring.servlet.multipart.max-file-size = 10MB
# 上传文件总的最大值
spring.servlet.multipart.max-request-size=100MB
编写上传controller
@RestController
@RequestMapping("/test")
public class UploadController {
@Value("${file.uploadFolder}")
private String uploadFolder;
@Value("${file.staticAccessPath}")
private String staticAccessPath;
@Value("${file.upload.nama}")
private String reurl;
@RequestMapping(value = "/upload", method = {RequestMethod.POST, RequestMethod.GET})
public List<String> upload(HttpServletRequest request) throws MultipartException {
String path = "";
List<String> ksfs = new ArrayList<>();
//1 需传imgUrl 其他值就是传file文件上传
try {
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if (multipartResolver.isMultipart(request)) {
//将request变成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
//获取multiRequest 中所有的文件名
Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
//多个文件上传
List<MultipartFile> fileList = multiRequest.getFiles(iter.next());
for (MultipartFile multipartFile : fileList) {
String realPath = uploadFolder;
String trueFileName = System.currentTimeMillis() + "." + FilenameUtils.getExtension(multipartFile.getOriginalFilename());
// 设置存放图片文件的路径
path = realPath + trueFileName;
File file = new File(path);
multipartFile.transferTo(file);
path = reurl + "/upload/" + trueFileName;
ksfs.add(path);
}
//单个文件
/* MultipartFile multipartFile=multiRequest.getFile(iter.next().toString());
if (multipartFile != null) {
excelFile = File.createTempFile(prefix, ".jpg");
multipartFile.transferTo(excelFile);
path = KSFileSave.uploadFile(prefix, excelFile, "jpg");
ksfs.add(path);
}*/
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
return ksfs;
}
}
调用接口测试,用如下的html页面
<form method="POST" enctype="multipart/form-data" action="http:127.0.0.1:9090/test/upload">
<table>
<tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>
<tr><td></td><td><input type="submit" value="Upload" /></td></tr>
</table>
</form>
点击选择文件上传验证返回结果
查看上传目录
点击返回接口访问