之前项目需求要做一个多附件上传 并显示上传文件 带删除操作 一筹莫展之际搜到某个兄弟发的博客感觉非常好用被我copy下来了此贴算是改良版 再次感谢(忘记叫什么了时间也有点久没有历史记录了)先上图

基于springmvc附件上传 所需jar包

commons.fileupload-1.2.0.jar

commons.io-1.4.0.jar

这个是我使用的jar包有需要的可以直接百度网盘下载 里面有好几个版本 自行选择 放在lib下面 使用的话maven 直接下载也可以

链接:https://pan.baidu.com/s/1gs0BBZZmh_-s-xIT7zm56g
提取码:86ne

jar包配置完成之后

1.在spring-mvc.xml配置文件下加入

<!-- 文件上传支持 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    <property name="maxUploadSize" value="100000000"/>//上传文件大小最大限制    <property name="maxInMemorySize" value="1000000"/>//</bean>

2.前端jsp页面

<form id="deviation" method="post">    <div>        <a href="javascript:void(0)">附件上传'<input type="file" class="iptFile" name="files" onchange="upFile(this)"></a>        <span class="no_file"></span>        <ul class="upload-enclosure-ul"> <%-- 根据上传的文件生成 每个 li--%>        </ul>    </div>    <input type="button" value="提交" onclick="UpladFile()"></form>
3.js
function upFile(a) {    var flag = $(a);    if (!flag[0].files || !flag[0].files[0]) {        return;    }    var name = flag[0].files[0].name;//文件名    var suffix = suffixName(name)[0].toLowerCase(); //后缀名    var size = flag[0].files[0].size;  //文件大小    var fr = new FileReader(); // 这个FileReader应该对应于每一个读取的文件都需要重新new一个    var files = flag[0].files[0]; // files可以获取当前文件输入框中选择的所有文件,返回列表    fr.readAsDataURL(files); // 读取的内容是加密以后的本地文件路径    fr.onload = function (e) { // 数据读取完成时触发onload对应的响应函数        var timeStamp = Math.floor(Math.random() * 10000); //自定义一个随机数        $(flag).parent().addClass('li' + timeStamp).hide(); //每次隐藏之前添加一个Class        var html = '<a href="javascript:void(0)" >附件上传\n' +            '<input type="file" class="iptFile" name="files" onchange="upFile(this)">\n' +            '</a>';

        $('.no_file').before(html);//每次生成一个input file  插入到节点        var li = display(suffix, files, timeStamp, name);        if ($('.upload-enclosure-ul li').length < 10) {  //判断不能超过10个  可自行写入多少            $('.upload-enclosure-ul').append(li);

        } else {            layer.alert("对不起,最多能选择10个附件!", 16, true);        }

    };}

function display(suffix, files, timeStamp, name) {    var li;    if (suffix == '.jpg' || suffix == '.jpeg' || suffix == '.png' || suffix == '.bmp' || suffix == '.gif') { //图片格式        li = '<li> <span><i class="fa fa-file-image-o">&nbsp;</i>' + name + '</span> <span class="size">(' + parseInt(files.size / 1000) + 'kb)</span> <span class="remove" data-class="li' + timeStamp + '"  onclick="deleteLi(this)">删除</span> </li>';    } else if (suffix == '.doc' || suffix == '.docx') {//word格式        li = '<li><span><i class="fa fa-file-word-o">&nbsp;</i>' + name + '</span> <span class="size">(' + parseInt(files.size / 1000) + 'kb)</span> <span class="remove" data-class="li' + timeStamp + '"  onclick="deleteLi(this)">删除</span> </li>';    } else if (suffix == '.xls' || suffix == '.xlsx') {//excel格式        li = '<li><span><i class="fa fa-file-excel-o">&nbsp;</i>' + name + '</span> <span class="size">(' + parseInt(files.size / 1000) + 'kb)</span> <span class="remove" data-class="li' + timeStamp + '"  onclick="deleteLi(this)">删除</span> </li>';    } else if (suffix == '.ppt' || suffix == '.pptx') {//PPT格式        li = '<li><span><i class="fa fa-file-pdf-o">&nbsp;</i>' + name + '</span> <span class="size">(' + parseInt(files.size / 1000) + 'kb)</span> <span class="remove" data-class="li' + timeStamp + '"  onclick="deleteLi(this)">删除</span> </li>';    } else if (suffix == '.ppt' || suffix == '.pdf') {//PDF格式        li = '<li><span><i class="fa fa-file-pdf-o">&nbsp;</i>' + name + '</span> <span class="size">(' + parseInt(files.size / 1000) + 'kb)</span> <span class="remove" data-class="li' + timeStamp + '"  onclick="deleteLi(this)">删除</span> </li>';    } else if (suffix == '.zip' || suffix == '.rar' || suffix == '.7z') {//压缩格式        li = '<li><span><i class="fa fa-file-excel-o">&nbsp;</i>' + name + '</span> <span class="size">(' + parseInt(files.size / 1000) + 'kb)</span> <span class="remove" data-class="li' + timeStamp + '"  onclick="deleteLi(this)">删除</span> </li>';    } else if (suffix == '.wav' || suffix == '.mp3' || suffix == '.aac' || suffix == '.wma') {//声音格式        li = '<li><span><i class="fa fa-file-video-o">&nbsp;</i>' + name + '</span> <span class="size">(' + parseInt(files.size / 1000) + 'kb)</span> <span class="remove" data-class="li' + timeStamp + '"  onclick="deleteLi(this)">删除</span> </li>';    } else if (suffix == '.avi' || suffix == '.mp4' || suffix == '.mov' || suffix == '.mkv' || suffix == '.rm' || suffix == '.rmvb' || suffix == '.mpg' || suffix == '.mpeg') {//视频格式        li = '<li><span><i class="fa fa-file-video-o">&nbsp;</i>' + name + '</span> <span class="size">(' + parseInt(files.size / 1000) + 'kb)</span> <span class="remove" data-class="li' + timeStamp + '"  onclick="deleteLi(this)">删除</span> </li>';    } else if (suffix == '.txt') {//文本格式        li = '<li><span><i class="fa fa-file-text-o">&nbsp;</i>' + name + '</span> <span class="size">(' + parseInt(files.size / 1000) + 'kb)</span> <span class="remove" data-class="li' + timeStamp + '"  onclick="deleteLi(this)">删除</span> </li>';    } else {        li = '<li><span><i class="fa fa-file-o">&nbsp;</i>' + name + '</span> <span class="size">(' + parseInt(files.size / 1000) + 'kb)</span> <span class="remove" data-class="li' + timeStamp + '"  onclick="deleteLi(this)">删除</span> </li>';    }    return li;}

function deleteLi(a) {    $(a).parent().remove();    var attr = "." + $(a).attr('data-class');    $(attr).remove(); //删除对应 input file    if ($('.li').length != 0) { // 显示隐藏 未选择文件字眼        $('.no_file').hide();    } else {        $('.no_file').show();    }}

function suffixName(file_name) {    var result = /\.[^\.]+/.exec(file_name);    return result;}

/*   附件上传    */function UpladFile() {    var formData = new FormData($("#deviation")[0]);    $.ajax({        type: 'POST',        url: '<c:url value="/product/deviation/action.do?method=upload"/>',//自己后台controller路径        data: formData,        contentType: false,        cache: false,        processData: false,        contentType: false    }).success(function (data) {

    }).error(function () {        alert("上传失败");    });}

4.后端java
@Controller@RequestMapping(value = "/product/deviation/action.do")public class ActionController {
/*多附件上传 */@RequestMapping(params = {"method=upload"}, method = RequestMethod.POST)@ResponseBodypublic void fileupload(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) throws IOException {    //获取服务器中保存文件的路径    String path = request.getSession().getServletContext().getRealPath("") + "\\enclosure\\";    System.out.println(path);    for (int i = 0; i < files.length; i++) {        MultipartFile file = files[i];        //保存文件        try {            if (!file.isEmpty()) {                File filepath = new File(path);                if (!filepath.exists()) //判断如果没有enclosure文件夹自动创建                    filepath.mkdirs();                // 文件保存路径                String savePath = path + file.getOriginalFilename();                // 转存文件                file.transferTo(new File(savePath));                //附件上传成功后 将 name url 保存到数据库中

            }        } catch (Exception e) {            e.printStackTrace();        }    }

}
}

5.我是根据ajax提交 也可以直接form表单提交 java代码不变前端form加上 enctype="multipart/form-data"就ok了 
<form id="deviation" method="post" enctype="multipart/form-data">
希望对你们有点帮助 有问题可以在下面留言 我看到了会及时回复

Springmvc file多附件上传 显示 删除操作的更多相关文章

  1. java操作FTP,实现文件上传下载删除操作

    上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...

  2. file 多次上传附件功能完善

    之前解决了一个页面中的单个附件上传问题,使用的是 id 定位.但是一个页面中,可能存在多个附件上传的地方,这时候如果继续使用 id,会出问题. 我依旧会上传一个附件.附件链接地址: https://f ...

  3. input type=file实现图片上传,预览以及图片删除

    背景 前两天在做一个PC网站的意见反馈,其中涉及到了图片上传功能,要求可以上传多张图片,并且支持图片上传预览及图片删除, 图片上传这一块以前没怎么搞过,而且一般也很少会碰到这样的需求,所以在做这个功能 ...

  4. jQuery EasyUI/TopJUI上传多个附件并可以进行删除操作

    jQuery EasyUI/TopJUI上传多个附件并可以进行删除操作 html <table data-toggle="topjui-datagrid" data-opti ...

  5. dedecms 5.7文章编辑器附件上传图标不显示

    我最近发现在使用dedecms 5.7文章编辑器附件上传图标不显示了,以前是没有问题的,这个更新系统就出来问题了,下面我来给大家分享此问题解决办法.   问题bug:在dedecms 5.7中发现了一 ...

  6. NuGetTools:批量上传、删除和显示NuGet包

    快照 前言 NuGet是.NET开发必不可少的包管理工具,在日常更新版本过程中,可能需要批量发布 NuGet 包,也不可避免需要发布一些测试的包,后期想将这些测试或者过期的包删除掉.nuget.org ...

  7. asp.net结合uploadify实现多附件上传

    1.说明 uploadify是一款优秀jQuery插件,主要功能是批量上传文件.大多数同学对多附件上传感到棘手,现将asp.net结合uploadfiy如何实现批量上传附件给大家讲解一下,有什么不对的 ...

  8. 使用plupload做一个类似qq邮箱附件上传的效果

    公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...

  9. EBS开发附件上传和下载功能(转)

    原文地址: EBS开发附件上传和下载功能 上传 Oracle ERP二次开发中使用的方式有两种,一是通过标准功能,在系统管理员中定义即可,不用写代码,就可以使几乎任何Form具有附件功能,具体参考系统 ...

随机推荐

  1. S:List

    描述 写一个程序完成以下命令:new id ——新建一个指定编号为id的序列(id<10000)add id num——向编号为id的序列加入整数nummerge id1 id2——合并序列id ...

  2. LoadRunner12_脚本中运行JavaScript

    版权声明:本文为博主原创文章,未经博主允许不得转载. [系统及软件配置] LR版本:12.53 JDK版本:1.8 函数:web_js_run,该函数仅在LR12版本提供支持,LR11不支持JavaS ...

  3. 三,Smarty模板技术/引擎——变量操作(2)

    1, 变量的分类 ① 从PHP中分配的变量,比如a.php跳转到b.php时候,可以在a.php中分配变量,b.tpl中直接调用.a.php中代码,$smarty->assign(‘str’,’ ...

  4. django2使用xadmin打造适合国人的后台管理系统(1)

    python火了之后,学习python的人也越来越多了,python做web开发的话,flask.django是比较火的框架了,django是一个比较大的框架,也是一个快速开发利器.但是,django ...

  5. String,数组,list集合长度的使用

    public class Use{ public static void main(String[] args){ int[] arr=new int[]{19,10,20,30,23,13}; // ...

  6. Python3之collections模块

    简介 collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple namedtuple 是一个函数,它用来创建一个自定义的元组对象,并且规定了元组元素的个数 ...

  7. [bzoj4445] [SCOI2015]小凸想跑步 (半平面交)

    题意:凸包上一个点\(p\),使得\(p\)和点\(0,1\)组成的三角形面积最小 用叉积来求: \(p,i,i+1\)组成的三角形面积为: (\(\times\)为叉积) \((p_p-i)\tim ...

  8. Windows下Anaconda安装 python + tensorflow CPU版

    下载安装Anaconda 首先下载Anaconda,可以从清华大学的镜像网站进行下载. 安装Anaconda,注意安装时不要将添加环境变量的选项取消掉. 安装完成之后,在安装目录下cmd,输入: co ...

  9. 【转】IDEA中xml文件头报错:URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)

    有时候在IDEA中配置spring文件时会出现这个错误  URI is not registered (Settings | Languages & Frameworks | Schemas ...

  10. 洛谷 P4248 / loj 2377 [AHOI2013] 差异 题解【后缀自动机】【树形DP】

    可能是一个 SAM 常用技巧?感觉 SAM 的基础题好多啊.. 题目描述 给定一个长度为 \(n\) 的字符串 \(S\) ,令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀,求: \[ ...