选中多文件同时上传(利用input元素的multiple属性)

网页:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="upload.do" method="post" enctype="multipart/form-data">
        <p>一个选择上传的文件</p>
        <input type="text" name="reck" value=""/><br/>
        <!-- 可以选取一张或者多种图片上传 -->
        <input type="file" name="files" multiple/><br/>
        <!-- 每个input元素只能选中一个文件 -->
<!--        <input type="file" name="files" /><br/>
        <input type="file" name="files" /><br/>
        <input type="file" name="files" /><br/> -->
        <input type="submit" value="Submit"/>
    </form>
</body>
</html> 

spring中配置:

    <!-- ========文件上传======= -->
    <!--200*1024*1024即200M resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="209715200" />
        <property name="defaultEncoding" value="UTF-8" />
        <property name="resolveLazily" value="true" />
    </bean>

java代码:

package org.wxy.demo.action;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.MultipartFile;
/**
 *
 * <一句话功能简述><p>
 * MultipartFile类常用的一些方法:
 * String getContentType()          //获取文件MIME类型
 * InputStream getInputStream()     //后去文件流
 * String getName()                 //获取表单中文件组件的名字
 * String getOriginalFilename()     //获取上传文件的原名
 * long getSize()                   //获取文件的字节大小,单位byte
 * boolean isEmpty()                //是否为空
 * void transferTo(File dest)       //保存到一个目标文件中。
 *
 * @author wangxy
 * @param <E>
 *
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
@Controller
public class FileUpDownCtrl<E> {

    /**
     * 上传文件
     * @param file
     * @return
     */
    @RequestMapping(value="/upload.do")
    public String fileUpload(@RequestParam("files") MultipartFile[] files,HttpServletRequest request) {
        String rect = (String) request.getAttribute("rect");
        System.out.println(rect);

        //判断file数组不能为空并且长度大于0
        if(files!=null && files.length>0){
            //循环获取file数组中得文件
            for(int i = 0;i<files.length;i++){
                MultipartFile file = files[i];  

                try {
                    //获取存取路径
                    String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/" + file.getOriginalFilename();
                    // 转存文件
                    file.transferTo(new File(filePath));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 重定向
            return "redirect:/list.do";
        }
        // 重定向
        return "redirect:/fail.html";
    } 

    @RequestMapping(value="/list.do")
    @ResponseBody
    public String list(HttpServletRequest request,HttpServletResponse response) {
        String filePath = request.getSession().getServletContext().getRealPath("/") + "upload";
        File[] files = new File(filePath).listFiles();

        StringBuilder fileNames = new StringBuilder();
        for(File f : files){
            System.out.println(f.getName());
            fileNames.append(f.getName()+"\n");
        }
        return fileNames.toString();
    }

    /**
     * 配置了 <property name="resolveLazily" value="true" />
     * 才有效
     * @author wangxy
     *
     * @param ex
     */
    @ExceptionHandler
    public void doExcepiton(Exception ex){
        if(ex instanceof MaxUploadSizeExceededException){
            System.out.println("文件太大");
        }
    }

}
时间: 2024-08-07 18:41:21

选中多文件同时上传(利用input元素的multiple属性)的相关文章

利用Jquery使用HTML5的FormData属性实现对文件的上传

1.利用Jquery使用HTML5的FormData属性实现对文件的上传 在HTML5以前我们如果需要实现文件上传服务器等功能的时候,有时候我们不得不依赖于FLASH去实现,而在HTML5到来之后,我们很容易的实现对文件的上传,只需要利用HTML5的一个FormData属性,结合Jquery就很容易实现文件的上传,而且读取文件的上传进度,下面这个上传案例就是基于上面所说的实现的,下面我将所所有的JS和CSS以及HTML页面代码放在下面. 注意事项:FormData属性必须依赖于HTML5,所以如

利用webuploader实现超大文件分片上传、断点续传

之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需求,都能得到满足.小小开心了一把. 但无论插件再怎么灵活,也难以应付所有的需求,比如,你要上传一个2G的文件.以现在我们的网速,恐怕再快也得传半小时.要命的是,如果你在上传到90%的时候不小心关掉了浏览器,或者是手一抖摁了F5,完了,一切还得从头再来.这种用户体验简直太糟糕了.所以,断点续传就十分有

危险的文件夹上传框

网址:http://www.cnblogs.com/index-html/p/dialog-phishing.html 文件对话框 文件上传对话框是一直以来就存在的网页控件. 到了 HTML5 时代,增加了更多的功能,例如支持文件多选.Chrome 甚至还支持「上传文件夹」这一私有特征: <input type="file" webkitdirectory /> 在给用户方便的同时,其安全隐患也逐渐出现.用户平时在下载时,理所当然的弹出的是保存对话框,因此常常不仔细看就做出

【转】文件各种上传,离不开的表单

阅读目录 利用表单实现文件上传 表单异步上传(jquery.form插件) 模拟表单数据上传(FormData) 分片上传 使用HTML5 拖拽.粘贴上传 上传插件(WebUploader) 总结 作为程序员的我们,经常会要用到文件的上传和下载功能.到了需要用的时候,各种查资料.有木有..有木有....为了方便下次使用,这里来做个总结和备忘. 利用表单实现文件上传 最原始.最简单.最粗暴的文件上传. 前端代码: //方式1 <form action="/Home/SaveFile1&quo

HTML5实现图片文件异步上传

利用HTML5的新特点做文件异步上传非常简单方便,本文主要展示JS部分,html结构.下面的代码并未使用第三发库,如果有参照,请注意一些未展现出来的代码片段.我这边的效果预览: 1.文件未选择 2.文件已选择 HTML代码部分: 思路:下面代码中我利用css的z-index属性将input="file"标签隐藏在了id=btnSelect元素下面,通过触发a标签的点击后,弹出文件选择框.下面的masklayer用于点击确认按钮后的弹出层,避免用户重复点击确认按钮. <div id

JSP中文件的上传于下载示例

一.文件上传的原理 1.文件上传的前提: a.form表单的method必须是post b.form表单的enctype必须是multipart/form-data(决定了POST请求方式,请求正文的数据类型) 注意:当表单的enctype是multipart/form-data,传统的获取请求参数的方法失效. 请求正文:(MIME协议进行描述的,正文是多部分组成的) -----------------------------7dd32c39803b2 Content-Disposition:

【Struts2】文件的上传与上传权限的控制

很多关于Struts2的文章,对此都有详细的介绍,但是里面的示例的程序写得很糟糕.各种无意义的拦截器技术.国际化技术.初始化参数,把原本简单的程序弄得很繁琐.同时,部分关键的代码没有写.导致每次上传Tomcat都报Unable to find 'struts.multipart.saveDir' property setting.的警告.然后上传大点的文件,整个Web工程就崩溃,然后后台抛出大段的File Upload BaseSize Limit Exceeded Exception异常,刷爆

【前端】文件各种上传离不开的表单

阅读目录 利用表单实现文件上传 表单异步上传(jquery.form插件) 模拟表单数据上传(FormData) 分片上传 使用HTML5 拖拽.粘贴上传 上传插件(WebUploader) 总结 作为程序员的我们,经常会要用到文件的上传和下载功能.到了需要用的时候,各种查资料.有木有..有木有....为了方便下次使用,这里来做个总结和备忘. 利用表单实现文件上传 最原始.最简单.最粗暴的文件上传.前端代码: //方式1 <form action="/Home/SaveFile1"

JAVAWEB之文件的上传下载

文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将他们表达出来.下面是具体的步骤,大家可以跟着我一步一步的用apache的fileupload插件来完成文件的上传下载. 1.创建一个web工程,我们这里取名为fileupload 2.导入相关jar包,,数据源使用的是apache-c3p0数据源,以及上传下载插件包,goson库,以及mysql驱动