页面支持选择多个文件并上传(非插件,脚本实现)

来源:互联网 发布:管家婆导入数据失败 编辑:程序博客网 时间:2024/06/05 03:16

最近一个朋友遇到这个问题,由于公司的页面已经写好了。所以插件用不上,而且插件对浏览器的支持并不一定很理想。所以我实现了一个简略版,需要优化和完善。代码如下:

<body>
<form action="upload.do" method="post">
    <span class="choosefile">选择文件</span>
    <input type="button" value="上传"/>
</form>
</body>

页面body里面,我只放入一个span块元素,用CSS修饰一下,看起来像一个大大的选择文件按钮。

剩下的事情就交给脚本来完成。

<script type="text/javascript">
    $(function(){
        var filecount = 0;
        var filenamecount=0;
    $(".choosefile").click(function(){
       var inputfile ="<input type='file' style='display:none;' name='fileinput' class='fileinput";
       var filenamediv="<div class='filename";
       filenamediv+=(filenamecount++)+"'></div>";
    inputfile += (filecount++)+"'/>";
    $("form").append(inputfile);
    $(".fileinput"+(filecount-1)).click();
    $(".fileinput"+(filecount-1)).change(function(){
       var v=$(this).val();
                $(filenamediv).appendTo($("form"));
                $(".filename"+(filenamecount-1)).text(v.substring(v.lastIndexOf("\\")+1,v.length));
    });
    });
    //节点删除,名称DIV节点,文件上传输入框节点,
    //最好放入一个大的DIV容器,最后删除名称DIV节点的父节点即这个大的DIV容器节点就可以了...
   
    });
</script>

主要就是节点的归类和包装。如何用JS统一管理这些节点,如动态插入,动态删除。最后就是表单的一个提交过程,后台用struts2的就用File文件数组来接受。

这个是我觉得最容易实现的方法。

还有一个方法就是我打算用一个Input[file]去接收多个文件并用脚本保存合并的文件流最后用ajax提交到后台,实现难度在于如何对文件进行流化并且合并,如何解读input[file]文件的选择与否,html标签的编译与解析都是浏览器完成的JS如何做到?后台如何对已经流化的文件进行解析?浏览器可以将本地文件流化通过HTTP传到后台,但是用JS如何流化并且以什么样的形式进行合并多个文件流一起发送?后台如何对合并的多文件流进行拆分和解析。


原创粉丝点击