SSM文件上传下载

1.加jar包(mysl版本不同连接的Jar包就不一样)

在这里插入图片描述

2.文件上传html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>管理员文件上传</h2>
<form method="post" action="fileUploads" enctype="multipart/form-data">
  <p>文件名:<input type="file" name="file1"></p>
  <p>文件名:<input type="file" name="file2"></p>
  <p>文件名:<input type="file" name="file3"></p>
  <p>文件名:<input type="submit" value="提交"></p>
</form>
</body>
</html>

3 ssm.ml 文件配置(aplication.xmx自行配置)

    <!--文件上传的配置-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置文件的大小(1048576=1M)-->
        <property name="maxUploadSize" value="4194304"/>
        <!--缓存区大小-->
        <property name="maxInMemorySize" value="4096"/>
        <property name="defaultEncoding" value="utf-8"/>
    </bean>

4.各个层的代码

在这里插入图片描述

5.文件上传Controer(代码)

    @RequestMapping("fileUploads")
    public String upload(HttpServletRequest request) throws IOException {
        // 将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
        CommonsMultipartResolver multipartResolver =
                new CommonsMultipartResolver(request.getSession().getServletContext());

        // 检查form中是否有 enctype="multipart/form-data"
        if (multipartResolver.isMultipart(request)) {
            // 将request变成多部分request
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
            // 获取multiRequest 中所有的文件名
            Iterator iter = multiRequest.getFileNames();
            while (iter.hasNext()) {
                // 一次遍历所有文件
                MultipartFile file = multiRequest.getFile(iter.next().toString());
                if (file != null && file.getOriginalFilename() != "") {
                    //文件格式的判断 文件名的处理省略
                    String fileName = file.getOriginalFilename();
                    /*UUID命名文件避免文件命名重复*/
                    String uuid = UUID.randomUUID().toString();
                    String path = request.getSession().getServletContext()
                            .getRealPath("/userFile/") + uuid + "_" + fileName;
                    //需在web下创建一个userFile文件夹(该文件夹下必须有一个子文件)
                    file.transferTo(new File(path));
                    // 上传到数据库
                    filesService.addFile(uuid + "_" + fileName);
                }
            }
        }
        return "index";
    }

6.上传文件(javaWeb第二四六章)

在这里插入图片描述

7.文件下载(Controller代码)

7.1html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件下载</title>
</head>
<script src="js/jquery-1.12.4.min.js"></script>
<script>
    $(function () {
        $.getJSON("filesList", function (data) {
            console.log(data);
            loadData(data);
        });
    });

    function loadData(data) {
        $("#t tr:gt(0)").remove();
        for (var i = 0; i < data.length; i++) {
            var str = "<tr><td>";
            str += "<input type='checkbox' class='choose' value='" + data[i].fileId + "'/></td><td>";
            str += data[i].fileId + "</td><td>";
            str += data[i].fileName.substr(data[i].fileName).slice(37) + "</td><td>";
            str += "<a href='fileDowns?filename=" + data[i].fileName + "'>下载</a></td></tr>";
            $("#t").append(str);
        }
    }

</script>
<body>

<a href="fileDowns?filename=5a54247f-2127-4f4f-b3bf-d2025077c7fc_c3p0.zip">文件下载</a>
<div>
    <h3 style="color: red">文件下载</h3>
    <button><a href="index.html">首页</a></button>
    <table id="t" border="1" cellpadding="3" cellspacing="3">
        <tr>
            <th><input type="checkbox" onclick="" id="all"></th>
            <th>序號</th>
            <th>文件名</th>
            <th>操作</th>
        </tr>
    </table>
</div>
</body>
</html>

7.2前端输出文件名(根据数据库的文件名下载)

    @RequestMapping(value = "filesList")
    @ResponseBody
    public String getFilesList() {
        System.out.println("进入filesList_>");

        //调用底层方法取数据获取文件名
        List<Files> list = filesService.getFiles();
        String string = JSON.toJSONString(list);
        System.out.println(string);
        return string;
    }

7.3文件下载


    @RequestMapping(value = "fileDowns")
    public void download(HttpServletRequest request, HttpServletResponse response, String filename) throws IOException {
        //checkPay.apk为需要下载的文件
        //String filename = "checkPay.apk";   //我这里使用的是一个固定的文件,方法可以不用写filename参数
        //获取文件的绝对路径名称,apk为根目录下的一个文件夹,这个只能获取根目录文件夹的绝对路径
        String path = request.getSession().getServletContext().getRealPath("userFile") + "\\" + filename;
        System.out.println(path);

        //得到要下载的文件
        File file = new File(path);
        if (!file.exists()) {
            response.setContentType("text/html; charset=UTF-8");//注意text/html,和application/html
            response.getWriter().print("<html><body><script type='text/javascript'>alert('您要下载的资源已被删除!');</script></body></html>");
            response.getWriter().close();
            System.out.println("您要下载的资源已被删除!!");
            return;
        }
        //转码,免得文件名中文乱码
        filename = URLEncoder.encode(filename, "UTF-8");
        //设置文件下载头
        response.addHeader("Content-Disposition", "attachment;filename=" + filename.substring(37));
        //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
        response.setContentType("multipart/form-data");
        // 读取要下载的文件,保存到文件输入流
        FileInputStream in = new FileInputStream(path);
        // 创建输出流
        OutputStream out = response.getOutputStream();
        // 创建缓冲区
        byte buffer[] = new byte[1024]; // 缓冲区的大小设置是个迷  我也没搞明白
        int len = 0;
        //循环将输入流中的内容读取到缓冲区当中
        while ((len = in.read(buffer)) > 0) {
            out.write(buffer, 0, len);
        }
        //关闭文件输入流
        in.close();
        // 关闭输出流
        out.close();
    }

7.5文件下载(javaWeb第六章)

在这里插入图片描述


版权声明:本文为m0_45256755原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。