Uploading and downloading java spring files

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&amp;characterEncoding=UTF-8&amp;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:配置-->
<!-- -&ndash;&gt;-->
</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>

Guess you like

Origin blog.csdn.net/m0_51828898/article/details/130246137