SpringMVC-文件的上传与下载
文件上传
导入commons-fileupload.jar包
在pom.xml文件中引入依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
在springmvc配置文件中添加
<!--注意,这个id只能写multipartResolver,写成其他的会报400错误-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" ></bean>
编写FileController.java
package com.dapan.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Controller
@RequestMapping("file")
public class FileController {
@RequestMapping("hello")
public String hello() {
return "fileUpload";
}
@RequestMapping("upload")
public String upload(@RequestParam("myFile") MultipartFile myFile, HttpServletRequest request) {
//获取文件的原始名称
String originalFileName = myFile.getOriginalFilename();
//一般会将文件进行重命名进行存储,避免不同用户上传了相同文件进行了覆盖
//存储到服务器的文件名称=随机的字符串+根据实际名称获取到源文件的后缀
String fileName = UUID.randomUUID().toString().replaceAll("-","") + originalFileName.substring(originalFileName.lastIndexOf("."));
System.out.println(fileName);
//文件存储路径 存储在webapp/uploadFile目录下
String realPath = request.getServletContext().getRealPath("/uploadFile")+"/";
try {
myFile.transferTo(new File(realPath+fileName));
} catch (IOException e) {
e.printStackTrace();
}
return "ok";
}
}
编写fileUpload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>fileUpload</title>
</head>
<body>
<form action="/file/upload" method="post" enctype="multipart/form-data">
请选择文件:<input type="file" name="myFile" /><br>
<button type="submit">上传文件</button>
</form>
</body>
</html>
运行结果:
在地址栏中输入localhost:8080/file/hello跳转到fileUpload.jsp页面
选择本地资源
点击上传,上传成功后跳转到ok页面
在idea中可以看到经过处理后的文件
文件下载
在FileController.java中新增download方法
@RequestMapping("download")
public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException {
//指定文件的路径-- 要保证指定的路径下有该文件才可以
String path=request.getServletContext().getRealPath("/uploadFile")+"/e070ad57270c433c9cc7fca1ab3a1bfc.jpg";
//创建响应的头信息的对象
HttpHeaders headers = new HttpHeaders();
//标记以流的形式作出响应
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//以附件的形式响应给用户
headers.setContentDispositionFormData("attachment", URLEncoder.encode("e070ad57270c433c9cc7fca1ab3a1bfc.jpg","utf-8"));
File file = new File(path);
ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
return responseEntity;
}
在fileUpload.jsp页面中新增下载按钮
<form action="/file/download" method="post" enctype="multipart/form-data">
<button type="submit">下载图片--e070ad57270c433c9cc7fca1ab3a1bfc.jpg</button>
</form>
这里下载的文件必须存在,否则会报错
运行结果:
点击下载图片,出现下载弹窗
下载后能成功打开
这就是Springmvc最基本的的文件上传与下载了,还可以扩展很多功能,例如:上传文件的时候,配置拦截器,限定文件的大小和类型,下载的时候,根据页面传递的参数进行下载内容。
内容如果有错误的地方,烦请各位大佬批评指针!!!