您查询的关键词是:fileupload上传 文件 
下面是原始网址 http://www.anyrt.com/blog/list/ajaxfileupload.html 在 2020-07-21 23:28:32 的快照。

360搜索与该网页作者无关,不对其内容负责。

Ajaxfileupload异步上传文件实现_AnyReport

AjaxFileUpload实现文件异步上传


AjaxFileUpload实现文件异步上传,本文对AjaxFileUpload上传遇到的问题进行完善,通过css隐藏“选择上传”按钮实现自定义上传按钮,
$.ajaxFileUpload(options)

options 主要的参数:
1)url:上传到服务端URL地址
2)fileElementId:上传的文件域的ID,即<input class='addfileI' type='file' name='upload-excel-file' id='upload-excel-file'>的upload-excel-file
3)dataType:服务端返回的数据类型,可以为xml,script,json,html,一般情况使用json
4)success:文件上传成功后AjaxFileUpload回调的函数
5) error:文件上传失败AjaxFileUpload回调的函数

AjaxFileUpload下载:ajaxfileupload.js

          Ajaxfileupload异步上传

隐藏“选择上传”按钮

定义一个点击上传的按钮button,然后将文件域移动到定义按钮的位置,覆盖这个按钮即可,然后将文件域透明度设置为0

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="http://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet">
<script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="ajaxfileupload.js"></script>
<style>
.addfileI {
position:absolute;
left:0px;
font-size:26px;
background-color: blue;
opacity:0;
filter:alpha(opacity=0)
}
</style>
</head>
<body style="padding:50px;">
<input type="button" value="上传文件"/>
<a href="javascript:void(0)" style='height:38px;width:60px;position:absolute;top:58px;left:58px;z-index:0;overflow:hidden;'>
<input class='addfileI' type='file' name='upload-excel-file' id='upload-excel-file'>
</a>
</body>
</html>

文件域添加change事件

文件域添加change事件,改变文件域时执行上传文件功能

$("#upload-excel-file").bind("change", function() {
$.ajaxFileUpload({
url:"/form/file_parse.htm",
secureuri:false,
fileElementName:'upload-excel-file',
dataType: 'json',
success: function(data, status){
}, error: function (data, status, e) {
}
});
});

解析响应的数据

上面ajaxFileUpload文件上传之后会回调success函数或是error函数,参数data是服务端返回的数据,当dataType=json时,浏览器是google、firefox等服务端返回的JSON数据(data)会多了<pre></pre>如:<pre>{"code":0,"msg":""}</pre>,会造成上传成功但ajaxFileUpload解析json数据发生错误,这时回调的函数是error,这里修改了原来ajaxFileUpload.js的uploadHttpData方法,如下判断返回的JSON字符是否是<pre>开始
还有一个方法:经测试如果服务端返回的是String不是JSON对象,这时data数据不会带<pre></pre>

uploadHttpData: function( r, type ) {
var data = !type;
data = type == "xml" || data ? r.responseXML : r.responseText;
// If the type is "script", eval it in global context
if ( type == "script" ) {
jQuery.globalEval( data );
}
// Get the JavaScript object, if JSON is used.
if (type == "json") {
//suport chrome, firefox
var jsonString = data;
if(data.startWith("<pre")) {
jsonString = $(data).text();
}
data = eval('(' + jsonString + ')');
}
// evaluate scripts within html
if ( type == "html" ) {
jQuery("<div>").html(data).evalScripts();
}
return data;
}

html示例

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="http://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet">
<script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="ajaxfileupload.js"></script>
<style>
.addfileI {
position:absolute;
left:0px;
font-size:26px;
background-color: blue;
opacity:0;
filter:alpha(opacity=0)
}
</style>
</head>
<body style="padding:50px;">
<input type="button" value="上传文件" onclick="uploadFile()"/>
<a href="javascript:void(0)" style='height:38px;width:60px;position:absolute;top:58px;left:58px;z-index:0;overflow:hidden;'>
<input class='addfileI' type='file' name='upload-excel-file' id='upload-excel-file'>
</a>
</body>
<script>
$("#upload-excel-file").bind("change", function() {
$.ajaxFileUpload({
url:"/form/file_parse.htm",
secureuri:false,
fileElementName:'upload-excel-file',
dataType: 'json',
success: function(data, status){
}, error: function (data, status, e) {
}
});
});
</script>
</html>