SpringMVC 文件上传

Spring MVC—文件上传

        MultipartResolver接口

                用于处理上传请求,将上传请求包装成可以直接获取文件的数据,方便操作。

        两个实现类

                tandardServletMultipartResolver

                        (使用了Servlet3.0标准的上传方式)

                CommonsMultipartResolver

                        (使用了Apache的commons-fileupload来完成具体的上传操作)

实现步骤(多文件上传)

        1.导入jar文件

                        commons-io-2.4.jar

                        commons-fileupload-1.2.2.jar

        2.配置文件

 <!-- 处理文件上传 -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8" /> <!-- 默认编码 (ISO-8859-1) -->
        <property name="uploadTempDir" value="/upload/" /> <!-- 上传后的目录名 -->
        <property name="maxUploadSize" value="-1" /> <!-- 最大文件大小,-1为无限止(-1) -->
    </bean>

        3.编写文件上传表单页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<form action="uploadmore.action" method="post" enctype="multipart/form-data">
    <%--选择多个文件--%>
    <p>文件:<input type="file" name="file" multiple></p>
    <%--选择单个文件--%>
    <p>文件:<input type="file" name="file"></p>
    <p>提交:<input type="submit" value="提交"></p>
</form>
</body>
</html>

        4.编写控制器

                进入文件上传表单控制器

@RequestMapping("/touploadmore.action")
    public String toUploadMore(){
        logger.info("进入多个文件上传控制器");
        return "uploadmore";
    }

                多文件上传控制器

@RequestMapping("/uploadmore.action")
    public  String uploadMore(@RequestParam("file") CommonsMultipartFile[] files,Model model){
        logger.info(files.length);
        //建立一个list集合存放信息
        List<String> list = new ArrayList<>();
        for (CommonsMultipartFile file :files){
            if(file.getSize()>0){
                try {
                    String name = this.createName(file.getOriginalFilename());
                    //创建磁盘路径地址
                    String path = "F:"+ File.separator+"dir"+File.separator+name;
                    //创建文件
                    File file1 = new File(path);
                    //将接收文件写入目标文件
                    file.transferTo(file1);
                    //将文件名放入集合中
                    list.add(name);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        logger.info(list);
        //将集合对象,放在作用域中
        model.addAttribute("list",list);
        return "mainmore";
    }

                其中为避免多个文件重名创建一个createName方法来修改文件的名称

private String createName(String name){
        //获取文件名(除去后缀名)
        String prefix=name.substring(0,name.lastIndexOf("."));
        //获取文件后缀名
        String suffix=name.substring(name.lastIndexOf("."));
        String newName=prefix+System.currentTimeMillis()+(int)(Math.random()*10000+1)+suffix;
        return newName;
    }

                在文件名与后缀之间加入上传时的时间与格林威治时间的毫秒差,加上1到10000的随机数的取整 

        文件上传结束后可以在mainmore.jsp中进行下载,并且在设置的F盘dir文件夹中获取到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值