ajaxfileupload.js结合input[type=file]无刷新上传

jQuery插件AjaxFileUpload用来实现ajax文件上传,该插件使用非常简单,接下来写个demo演示怎么用AjaxFileUpload插件实现文件上传。

说明:

语法:$.ajaxFileUpload([options])

  options参数说明:

1、url            上传处理程序地址。  

2,fileElementId       需要上传的文件域的ID,即<input type="file">的ID。

3,secureuri        是否启用安全提交,默认为false。

4,dataType        服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。

5,success        提交成功后自动执行的处理函数,参数data就是服务器返回的数据。

6,error          提交失败自动执行的处理函数。

7,data           自定义参数。这个东西比较有用,当有数据是与上传的图片相关的时候,这个东西就要用到了。

8, type            当要提交自定义参数时,这个参数要设置成post

错误提示:

1,SyntaxError: missing ; before statement错误

  如果出现这个错误就需要检查url路径是否可以访问

2,SyntaxError: syntax error错误

  如果出现这个错误就需要检查处理提交操作的服务器后台处理程序是否存在语法错误

3,SyntaxError: invalid property id错误

  如果出现这个错误就需要检查文本域属性ID是否存在

4,SyntaxError: missing } in XML expression错误

  如果出现这个错误就需要检查文件name是否一致或不存在

5,其它自定义错误

  大家可使用变量$error直接打印的方法检查各参数是否正确,比起上面这些无效的错误提示还是方便很多。

1、引入其支持文件,注意引用顺序

<script type="text/javascript" src="<%=basePath%>js/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="<%=basePath%>js/ajaxfileupload.js"></script>

2、在页面设置文件选择框,无需form包裹:注意此处id和name必须设置,在文章中你将知道原因,在此不做详细解释。

<input type="file" id="fileUpload" name="fileUploa" />

3、实现上传功能

<script type="text/javascript">
    //初始化页面
	$(document).ready(function(e) {
		 //选择文件框选择文件change事件
		 $("#fileUpload").change(function(){
			 var url=$(this).val();
			 var extend=url.substring(url.indexOf(".")+1);
			 var ext=new Array("jpg","jpeg","png","gif","bmp");
			 if(ext.toString().indexOf(extend)==-1){
				 alert("您上传的格式不正确,仅支持jpg、jpeg、png、gif、bmp,请重新选择!");
			 }

			 $.ajaxFileUpload({
			        url: '<%=basePath%>attach/api/upload', //后台提交地址
			        secureuri: false,//异步
			        fileElementId: 'fileUpload',//上传控件ID
			        dataType: 'json',//返回的数据信息格式
			        type:"post", //如果带附加参数,请设置type
			        success: function(data, status) {
			            if (data.success ==true) {
			               var attach=data.result[0];
			               $("[name=photo]").attr("src",attach.filePath);
			               alert("上传成功");
			             } else {
			                alert("服务器故障,稍后再试!");
			            }
			        }, error: function(data, status, e) {
			           alert(e);
			        }
			    });
			});

	});
</script>

4、后台接口:此处采用spring MVC

@RequestMapping(value = "/upload", method ={RequestMethod.POST,RequestMethod.GET})
	@ResponseBody
	public HashMap<String,Object> upload(HttpServletRequest request, HttpServletResponse response) 
                                                    throws InstantiationException, IllegalAccessException{
		HashMap<String,Object> result=new HashMap<String,Object>();
		ArrayList<Attach> attachList=attachService.uploadfy(request);
		if(attachList.size()>0){
			result.put("success", true);
			result.put("result", attachList);
		}else{
			result.put("success", false);
		}
	    return result;
	}

5、实现以上步奏即可完成上传。

总结:

在使用过程中可能遇到如下问题:

1、上传报该异常:SyntaxError:Unexpected token <

原因:是因为Server端的Response上加上了contentType="application/json"。但有时后端这么做是必须的,所以修改ajaxFileUpload源码,将<pre></pre>标签去掉,如下:
(请参考:http://liwx2000.iteye.com/blog/1540321)

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" ) {
             ////////////以下为新增代码///////////////
             data = r.responseText;
             var start = data.indexOf(">");
             if(start != -1) {
               var end = data.indexOf("<", start + 1);
               if(end != -1) {
                 data = data.substring(start + 1, end);
                }
             }
              ///////////以上为新增代码///////////////
              eval( "data = " + data);
        }
        // evaluate scripts within html
        if ( type == "html" )
            jQuery("<div>").html(data).evalScripts();  

        return data;
    }  

2、使用<input type="file" id="fileUpload" />该方式,在后台接收不到值?

原因:需要设置一下name属性    <input type="file" id="fileUpload" name="名称任意" />

时间: 2024-10-18 11:38:55

ajaxfileupload.js结合input[type=file]无刷新上传的相关文章

mvc中file无刷新上传文件

前言 上传文件应该是很常见必不可少的一个操作,网上也有很多提供的上传控件.今天遇到一个问题:input控件file无法进行异步无刷新上传.真真的感到别扭.所以就尝试这去处理了一下. 上传封装类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Web; n

input type=&quot;file&quot;多图片上传

单个的input type="file"表单也是可以实现多图片上传的 代码如下: <form action="manypic.php" method="post" enctype="multipart/form-data">        <input type="file" name="manypic[]" multiple>        <input

input type=&quot;file&quot; accept=&quot;image/*&quot;上传文件慢的问题解决办法

相信大家都写过<input type="file" name="file" class="element" accept="image/*"> 默认过滤掉所有非图片文件: 这段代码在Chrome和Safari等Webkit浏览器下却出现了响应滞慢的问题,可能要等 6~10s 才能弹出文件选择对话框.简直不能忍呀. 在IE和Firefox中使用 accept="image/*" 属性则没有发现响应

SpringMVC结合ajaxfileupload.js实现文件无刷新上传

直接看代码吧,注释都在里面 首先是web.xml [html] view plaincopyprint? <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-

ajaxfileupload.js插件结合一般处理文件实现Ajax无刷新上传

先上几张图更直观展示一下要实现的功能.本功能主要通过Jquery ajaxfileupload.js插件结合ajaxUpFile.ashx一般应用程序处理文件实现Ajax无刷新上传功能,结合NPOI2.0实现数据读取.这个功能在实际工作种经经常使用到,希望能给须要做这方面的人有些帮助. 一.功能页面布局及介绍 1.上传页面布局及input file上传功能 2.上传页面文件正在上传效果 3.上传完毕效果,多文件展示区 二.功能代码实现及资源引用 1.js资源文件引用 html页面js引用.须要引

js实现无刷新上传

在新增数据项的时候,用ajax实现无刷新提交,但上传文件的时候,由于数据类型原因,不能将页面的<asp:FileUpload>中以字符串值的方式传到js里调用.我一共找到了两个方法予以解决,实现无刷新上传. 第一种方法:利用js的ADODB.Stream,将文件先转换成流,再通过js上传到服务器,这样有个好处就是可以上传超大文件,并且由于是数据流,可以支持断点续传.方便显示上传进度等人性化功能.唯一的缺点是要客户端浏览器需要设置安全级别,或者安装相关ActiveX控件(这个控件自己做的,加载到

[Asp.net mvc]jquery.form.js无刷新上传

写在前面 最近在自己的网盘项目中想用ajax.beginform的方式做无刷新的操作,提交表单什么的都可以,但针对文件上传,就是个鸡肋.在网上查找了发现很多人都遇到了这个问题,大部分都推荐使用jquery.form.js的插件实现. demo 首先通过nuget安装插件jquery.form.js 引入js文件 <script src="~/Scripts/jquery.form.min.js"></script> 前端调用的代码 @{ ViewBag.Titl

移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传

现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片压缩,然后再把压缩后的图片上传到服务器. 一翻google之后,发现了localResizeIMG,它会对图片进行压缩成你指定宽度及质量度并转换成base64图片格式,那么我们就可以把这个base64通过ajax传到后台,再进行保存,先压缩后上传的目的就达到了. 处理过程 LocalResizeIM

jQuery AJAX 网页无刷新上传示例

新年礼,提供简单.易套用的 jQuery AJAX 上传示例及代码下载.后台对文件的上传及检查,以 C#/.NET Handler 处理 (可视需要改写成 Java 或 PHP). 有时做一个网站项目 (不论是否 ASP.NET),内附的 FileUpload 控件,功能不足 (页面必须刷新.不支援 AJAX),或外观太丑被用户嫌弃 (却无法透过 CSS 自定义外观).网路上虽已有许多可用的示例,如: jQuery File Upload,但功能太强大.外观复杂,欲仅取出部分功能来引用,反而不易