导入依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
编写配置
<!-- 实例化二进制流解析器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 指定文件上传过程中提交的数据库的编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 指定上传文件的保存的临时目录 -->
<property name="uploadTempDir" value="/upload"></property>
<!-- 指定上传的文件的最大大小 -->
<property name="maxUploadSize" value="1024000000"></property>
</bean>
前端
加入JSP标准库
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
上传
<form action="/fileUpLoad" method="post" enctype="multipart/form-data">
文件名:<input type="file" name="mf"><input type="submit" >
<c:if test="code == 1 || code == 2">
<span style="color: red"><c:out value="${msg}"></c:out></span>
</c:if>
</form>
下载
<c:forEach items="${fileNames}" var="fileName">
<a href="/fileDownLoad?fileName=${fileName}" />${fileName}</a><br>
</c:forEach>
后台
跳转上传页面
@RequestMapping("/toFilePage")
public String toFilePage(){
return "FileDownUpLoad";
}
上传控制器
@RequestMapping("/fileUpLoad")
public String fileUpLoad(MultipartFile mf, HttpSession session) throws IOException {
if (null != mf && !mf.isEmpty()) {
//获得服务器上的绝对路径
String filePath = "D:\\IdeaProject\\src\\main\\resources\\upload";
System.out.println(filePath);
//获得文件名
String fileName = mf.getOriginalFilename();
//判断是否重名
String finalFileName = FileUtil.fileTool(fileName, filePath);
File uploadFile = new File(filePath + "\\" + finalFileName);
//将文件拷贝到磁盘
mf.transferTo(uploadFile);
//获得文件夹下的所有文件名
File[] files = uploadFile.getParentFile().listFiles();
List<String> fileNames = new ArrayList<>();
for (File f : files) {
fileNames.add(f.getName());
}
session.setAttribute("fileNames", fileNames);
if (!uploadFile.createNewFile()) {
return "FileList";
} else {
session.setAttribute("msg", "文件写入失败,请重试");
session.setAttribute("code", 1);
return "FileDownUpLoad";
}
}else{
session.setAttribute("msg", "文件上传失败,请重试");
session.setAttribute("code", 2);
return "FileDownUpLoad";
}
}
下载控制器
@RequestMapping("/fileDownLoad")
public ResponseEntity fileDownLoad(String fileName) throws IOException {
System.out.println(fileName);
//获得需要下载的文件保存的目录
String path = "D:\\IdeaProject\\src\\main\\resources\\upload";
//获得需要下载的文件对象
File file = new File(path,fileName);
byte[] bytes = FileUtils.readFileToByteArray(file);
//创建封装响应头信息的对象
HttpHeaders header=new HttpHeaders();
//封装响应内容类型(APPLICATION_OCTET_STREAM 响应的内容不限定)
header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//设置下载的文件的名称
header.setContentDispositionFormData("attachment",fileName);
//创建ResponseEntity对象
ResponseEntity entity= new ResponseEntity(bytes, header, HttpStatus.CREATED);
return entity;
}
文件工具包
public static String fileTool(String fileName,String filePath){
//获得文件夹下的所有文件
File[] files = new File(filePath).listFiles();
//递归标注位
boolean flag = false;
//字符拆分
String[] fileNameSplited = null;
String finalFileName = "";
//文件重名处理:重名文件后面追加"-副本"
if (files.length>0){
for (File f: files) {
if (f.getName().equals(fileName)){
flag = true;
fileNameSplited = f.getName().split("\\.");
finalFileName = fileNameSplited[0] + "-副本." + fileNameSplited[1];
}
}
//递归尾
if (!flag){
return finalFileName;
}else {
//递归头
return fileTool(finalFileName,filePath);
}
}else {
//当文件里没有文件时,不做追加
File firstFile = new File(filePath+"\\"+fileName);
try {
firstFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return fileName;
}
测试
第一次提交
第二次提交
第三次提交
下载好的文件路径可以存放在数据库中也可以使用FastFDS文件系统做一个文件服务器,当然也可以用老办法放在文件夹下面