1、问题描述:

前一段时间要做一个excel数据导入到数据库的功能,当时用的是google chrome,没有用form表单,仅仅一个<input type="file"/>组件,上传excel时怎么也去不到文件路径,不论是从哪个驱动器上传,文件路径都是:c:\fakepath\文件名.xls。

2、解决方案

 网上转悠了老半天,没找到一个完美的方案,最后经个同事指导:

利用一个js(插件)ajaxfileupload.js,源码放到最后面,先看具体代码:

jsp:

<div class="rcon">
                                                    
<a href="download/subcompany.xls" style="color:blue;text-decoration: underline">下载号码模板</a>
<br />
<hr />
<input id="newfile" name="newfile" type="hidden" />
选择文件:
<input type="file" id="subfile" name="subfile" />
<br />
<input type="button" value="导入" id="importsub" />
</div>

注意: file input的name属性必须的,后面要用.

js代码:(17行用到了input的name属性)

文件上传到: url : '<%=webapp%>' '/FileUpload?path=file/share',这里用了servlet(该servlet对FileUpload路径进行拦截)

当然可以用action

$.ajaxFileUpload方法的成功回调方法有参数data及status,其中从data可以得知上传上去的文件的名字:文件名=data.img

function uploadfile() {
    var upload_file = $("#subfile").val();
    if (upload_file == null || upload_file == undefined || upload_file == "") {
        Showbo.Msg.alert('系统提示:请选择要上传的文件!');
        return false;
    } else {
        var file = upload_file.split('.');
        var suffix = file[file.length - 1];
        if (suffix != 'xls') {
            Showbo.Msg.alert('文件格式必须是:xls');
            return;
        }
        // $("#fileReal").val(upload_file);
        $.ajaxFileUpload( {
            url : '<%=webapp%>' + '/FileUpload?path=file/share',
            secureuri : true,
            fileElementId : 'subfile',
            dataType : 'json',
            success : function(data, status) {
                $('#pic').attr( {
                    src : '<%=webapp%>/file/share/' + data
                });
                $('#newfile').val(data.img);
                var filename = data.img;
                importSubNum(filename);
                //$('#pubbt').click();
            /*     $('#form1').submit();*/
            /*Showbo.Msg.alert('文件上传成功!');*/
        },
        error : function(data, status, e) {
            Showbo.Msg.alert('系统提示:' + e);
            return false;
        }
        });
    }
}