Springboot+Springmvc实现⽂件的上传和下载(附源码)
在系统中实现⽂件上传下载的⽅式挺多,⽐如通过IO流的⽅式,通过springmvc的⽅式等等。综合⽐较,后⼀种性能更⾼。今天我们就在springboot环境中来实现⼀下。
⽂件上传
第⼀步:新建⼀个springboot项⽬。
第⼆步:新建FileController、SpringmvcfileApplication、upload.jsp⽂件,保证⽂件路径如下。
第三步:在pom⽂件中添加依赖。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>at.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<scope>provided</scope>-->
</dependency>
</dependencies>
第四步:编写Controller⽂件。其中“String filePath”处需要填写⼀个本机存在路径,否则会报路径错误。
ample.springmvcfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.List;
@Controller
public class FileController {
private static final Logger LOGGER = Logger(FileController.class);
@GetMapping("/upload")
public String upload() {
return "upload";
}
@PostMapping("/upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return "上传失败,请选择⽂件";
}
String fileName = OriginalFilename();
// 这需要填写⼀个本地路径
String filePath ="E://springmvcfile//";
File dest = new File(filePath + fileName);
try {
LOGGER.info("上传成功");
return "上传成功";
} catch (IOException e) {
<(e.toString(), e);
}
return "上传失败!";
}
}
第五步:保证启动类⽂件SpringmvcfileApplication不变。spring到底是干啥的
@SpringBootApplication
public class SpringmvcfileApplication {
public static void main(String[] args) {
SpringApplication.run(SpringmvcfileApplication.class, args);
}
}
第六步:在application.properties⽂件中添加如下属性。
# 上传⽂件总的最⼤值
spring.servlet.multipart.max-request-size=10MB
# 单个⽂件的最⼤值
spring.servlet.multipart.max-file-size=10MB
## jsp
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
第七步:编写upload.jsp⽂件。
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<title>单⽂件上传</title>
</head>
<body>
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
第⼋步:运⾏main⽅法,在浏览器中访问对应路径,测试是否成功。
选择⽂件上传成功后,去对应本机路径中查看上传的⽂件。
⽂件下载
⽂件下载的实现和上传⼤同⼩异,只需在原来的⽂件中修改2处即可。
第⼀步:在Controller层添加如下代码。
@RequestMapping(value = "/download", method = RequestMethod.GET)
public ResponseEntity<Object> downloadFile() throws FileNotFoundException {
//String fileName = "C:/Users/wds/";
String fileName = "E:/springmvcfile/1.jpg";
File file = new File(fileName);
InputStreamResource resource = new InputStreamResource(new FileInputStream((file)));
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition",String.format("attachment;filename=\"%s\"",Name())); headers.add("Cache-Control","no-cache,no-store,must-revalidate");
headers.add("Pragma","no-cache");
headers.add("Expires","0");
ResponseEntity<Object> responseEntity = ResponseEntity.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/text"))
.body(resource);
return responseEntity;
}
第⼆步:在jsp⽂件中添加如下代码。
<form>
<a href="./download">下载</a>
</form>
第三步:进⾏测试。
我们可以看到,在路径下有两张图⽚,现在我要把1.jpg下载下来。
⼩结
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论