(本功能实现使用的是springboot1.5,springboot2.0配置略有不同)
基本功能
1.支持多文件上传,并返回上传成功后可以访问的地址
2.上传的文件最大限制为1M
3.可以自定义上传目录
主要配置
#限制文件上传(springboot不同的版本有所不同)
spring.http.multipart.max-file-size=1Mb
spring.http.multipart.max-request-size=1Mb#静态资源处理。
spring.mvc.static-path-pattern=/static/**
#文件上传目录
spring.resources.static-locations=file:H:/myfile/
后端代码
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.*;
@RestController
@RequestMapping("/file")
public class FileController{
@Value("${spring.resources.static-locations}")
String dirStr;
@RequestMapping("/upload")
public Map<String,Object> getInfo(HttpServletRequest request) throws IOException {
List<String> urlList = null;
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
request.getSession().getServletContext());
if(multipartResolver.isMultipart(request)){
urlList = new ArrayList<>();
dirStr = dirStr.substring(5);//去掉“file:”
File dir = new File(dirStr);
if(!dir.exists()){
dir.mkdirs();
}
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
Iterator iter=multiRequest.getFileNames();
while(iter.hasNext()) {
MultipartFile file=multiRequest.getFile(iter.next().toString());
File f = new File(dirStr+"/"+file.getOriginalFilename());
file.transferTo(f);//上传到本地
//访问上传的图片的url
String scheme = request.getScheme();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String imgUrl = scheme+"://"+serverName+":"+serverPort+"/static/"+file.getOriginalFilename();
urlList.add(imgUrl);
}
}
Map<String,Object> result = new HashMap<>();
result.put("code","1");
result.put("list",urlList);
return result;
}
}
上传测试
后记
在这里,本人仅仅进行了最简单的实现。在实际的项目开发中要比这个复杂,可能包括:存储目录的优化,文件过滤,文件的备份,缩略图的生成等等。