Article directory
basic code
Configuration file
pom.xml
<dependencies>
<!-- 上传文件的架包,书P203-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.13</version>
</dependency>
<!-- mysql 连接包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>compile</scope>
</dependency>
<!-- jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.0.2</version>
</dependency>
<!-- 数据验证-->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.3.Final</version>
</dependency>
<!-- 日志-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.2</version>
</dependency>
<!-- JSTL 依赖项-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
web.xml
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
dispatcher-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="Controller"/>
<context:component-scan base-package="Pojo"/>
<context:component-scan base-package="Service"/>
<!-- 配置数据效验-->
<mvc:annotation-driven validator="validator"/>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<!-- 配置数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="jiangzhier"/>
</bean>
<!--配置jdbc-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 创建了一个名为 multipartResolver 的 Spring Bean,用于处理客户端文件上传的请求-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
</bean>
<mvc:view-controller path="/" view-name="index"/>
<!-- 配置拦截器-->
<!--spring 的配置文件需要做的事情-->
<!--1:配置数据源,配置jdbc-->
<!--2:扫描对应的包-->
<!--3:配置-->
<!-- -–>-->
</beans>
Basic class
Service
DownloadAndUpdate
package Service;
import Pojo.Down;
import java.util.List;
public interface DownloadAndUpdate {
void addData(Down down);
List<Down> getDownFileList();
}
Impl
DownloadAndUpdateImpl
@Service
@Transactional
public class DownloadAndUpdateImpl implements DownloadAndUpdate {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void addData(Down down) {
String sql = "INSERT INTO files_table (fileName, realName) VALUES (?, ?)";
jdbcTemplate.update(sql, down.getFileName(),down.getRealName());
}
@Override
public List<Down> getDownFileList() {
String sql = "SELECT fileName,realName FROM files_table";
List<Down> list = jdbcTemplate.query(sql, new RowMapper<Down>() {
@Override
public Down mapRow(ResultSet rs, int rowNum) throws SQLException {
Down down = new Down();
down.setRealName(rs.getString("realName"));
down.setFileName(rs.getString("fileName"));
return down;
}
});
return list;
}
}
control
fileControl
@Controller
public class UserController {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private DownloadAndUpdateImpl downloadAndUpdate;
@RequestMapping("/shangchuan")
public String shangchaun(){
return "shangchuan";
}
//这里是上传部分的代码
@RequestMapping(value = "/shangchuan",method = RequestMethod.POST)
public String shangchuanfile(@RequestParam("file") MultipartFile file,Model model){
if (file.isEmpty()){
return "shangchuan";
}
//避免文件名重复,对文件名进行修改
String fileName = file.getOriginalFilename();
int index = fileName.lastIndexOf(".");
String suffer = fileName.substring(index);
String fileName2 = UUID.randomUUID().toString()+suffer;
File targetFile = new File("D:\\test",fileName2);
// 将数据写入一个类中
Down down = new Down();
down.setFileName(fileName2);
down.setRealName(fileName);
//添加到数据库
downloadAndUpdate.addData(down);
//从数据库读取列表
List<Down> list = downloadAndUpdate.getDownFileList();
try {
file.transferTo(targetFile);
model.addAttribute("lists",list);
return "shangchuan";
}catch (IOException e){
e.printStackTrace();
return "shangchuan";
}
}
//这里是下载的部分
@RequestMapping(value = "/download/{fileName}", method = RequestMethod.GET)
public ResponseEntity<byte[]> download(@PathVariable("fileName") String fileName) throws IOException {
String filePath = "D:\\test\\" + fileName;
File file = new File(filePath);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", fileName);
headers.setContentLength(file.length());
byte[] bytes = Files.readAllBytes(file.toPath());
return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}
}
poo
public class Down {
String fileName;
String realName;
//get和set,toString省略
}
Front-end JSP
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>上传文件</h1>
<div>
<form action="shangchuan" method="post" enctype="multipart/form-data">
<h1>123${error}</h1>
<input type="file" name="file">
<button type="submit" value="上传">上传</button>
<%-- <input type="submit" value="上传"/>--%>
</form>
</div>
<div>
<table>
<tr>
<th colspan="2">下载列表</th>
</tr>
<tr>
<th>文件名</th>
<th>下载</th>
</tr>
<c:forEach items="${lists}" var="item">
<tr>
<%-- <h1>${item}</h1>--%>
<th> <p >${item.realName}</p></th>
<th> <a href="download/${item.fileName}"> 下载 </a></th>
<%-- <h1>123${l123}</h1>--%>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>