二 然后写一个工具类,用来上传文件。4.0.0 org.springframework.boot spring-boot-starter-parent 2.5.5 com.zhao demoFile 0.1 war demo Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat provided org.springframework.boot spring-boot-starter-test test org.apache.maven.plugins maven-resources-plugin 3.1.0 org.springframework.boot spring-boot-maven-plugin
package com.zhao.demo.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Component
public class FileUtil {
public Object uploadImage(MultipartFile file, HttpServletRequest request) {
String realPath = "/space/projects_pro/uploadFile/fileImages/";
String projectName="demoFile-0.1";
Date date=new java.sql.Date(System.currentTimeMillis());
File dir = new File(realPath+"/"+date);
if (!dir.isDirectory()) {//文件目录不存在,就创建一个
dir.mkdirs();
}
String filename = file.getOriginalFilename();
String suffix= filename.substring(filename.lastIndexOf("."));
String newName= UUID.randomUUID().toString().replace("-", "")+suffix;
File fileServer = new File(dir, newName);
System.out.println("file文件真实路径:" + fileServer.getAbsolutePath());
//2,实现上传
try{
file.transferTo(fileServer);
}catch (IOException e){
e.printStackTrace();
}
String filePath = request.getScheme()+"://" +
request.getServerName() + ":"
+ request.getServerPort()+"/"+projectName
+ "/uploadFile/fileImages/" + date +"/"+ newName;
//3,返回可供访问的网络路径
Map map=new HashMap();
map.put("file文件真实路径",fileServer.getAbsolutePath());
map.put("返回可供访问的网络路径",filePath);
return map;
}
}
三 配置文件上传的文件大小限制
# 上传文件总的最大值 默认10MB spring.servlet.multipart.max-request-size=500MB #单个文件最大值 默认10MB spring.servlet.multipart.max-file-size=100MB四 写一个配置类,配置访问的网络路径。
package com.zhao.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlbasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class MyInterceptorConfig extends WebMvcConfigurationSupport {
private String realPath="/space/projects_pro/uploadFile/";
@Override
protected void addInterceptors(InterceptorRegistry registry) {
super.addInterceptors(registry);
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
// addResourceHandler是指你想在url请求的路径
// addResourceLocations是图片存放的真实路径
//设置映射规则,原路径(ResourceLocations)被设置成可以通过映射路径(ip:port/images)来访问,可以设置多个
registry.addResourceHandler("/uploadFile
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("
private CorsConfiguration addcorsConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
List list = new ArrayList<>();
list.add("*");
corsConfiguration.setAllowedOrigins(list);
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlbasedCorsConfigurationSource source = new UrlbasedCorsConfigurationSource();
source.registerCorsConfiguration("
@Controller
public class FileController {
@Autowired
private FileUtil fileUtil;
//produces="application/json;charset=utf-8",设置返回的编码格式
@RequestMapping(value = "/file",produces="application/json;charset=utf-8")
@ResponseBody
//@RequestParam(value = "file") 接收单个参数
public Object file(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request){
return fileUtil.uploadImage(file,request);
}
@RequestMapping(value = "/show",produces="application/json;charset=utf-8" )
@ResponseBody()
public String show(){
return "测试接口";
}
}
常见问题。
一 上传文件出现的问题。
org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes. at org.apache.tomcat.util.http.fileupload.impl.FileItemStreamImpl$1.raiseError(FileItemStreamImpl.java:117) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:76) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:135) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at java.io.FilterInputStream.read(FilterInputStream.java:107) ~[na:1.8.0_275] at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:97) ~[tomcat-embed-core-9.0.53.jar:9.0.53]解决方案。
出现这个问题,那是因为你上传的文件太大了,默认上传文件的大小是10MB,去配置文件配置一下上传的文件大小就可以了。
# 上传文件总的最大值 默认10MB spring.servlet.multipart.max-request-size=500MB #单个文件最大值 默认10MB spring.servlet.multipart.max-file-size=100MB二 打包出现的问题。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project demoFile: Input length = 1 -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException Process finished with exit code 1解决方案。
打包出现问题了,在pom.xml中增加一个包,加在plugins里面。
org.apache.maven.plugins
maven-resources-plugin
3.1.0
通过Postman调用接口,上传文件。
拿到返回的网络路径直接到浏览器访问即可。
不想敲那就复制,附上源码:赵海辉/demo - 码云 - 开源中国 (gitee.com)



