通过传统的form表单提交的方式上传文件:
html代码
<form id= "uploadform" action= "http://localhost:8080/cfjax_rs/rest/file/upload" method= "post" enctype ="multipart/form-data"> <h1 >测试通过rest接口上传文件 </h1> <p >指定文件名: <input type ="text" name="filename" /></p> <p >上传文件: <input type ="file" name="file" /></p> <p >关键字1: <input type ="text" name="keyword" /></p> <p >关键字2: <input type ="text" name="keyword" /></p> <p >关键字3: <input type ="text" name="keyword" /></p> <input type ="submit" value="上传"/> </form>
不过传统的form表单提交会导致页面刷新,但是在有些情况下,我们不希望页面被刷新,这种时候我们都是使用ajax的方式进行请求的:
js代码
$.ajax({ url : "http://localhost:8080/sts/rest/user", type : "post", data : $( '#postform').serialize(), success : function(data) { $( '#serverresponse').html(data); }, error : function(data) { $( '#serverresponse').html(data.status + " : " + data.statustext + " : " + data.responsetext); } });
如上,通过$('#postform').serialize()可以对form表单进行序列化,从而将form表单中的所有参数传递到服务端。
但是上述方式,只能传递一般的参数,上传文件的文件流是无法被序列化并传递的。
不过如今主流浏览器都开始支持一个叫做formdata的对象,有了这个formdata,我们就可以轻松地使用ajax方式进行文件上传了。
关于formdata及其用法
formdata是什么呢?我们来看看mozilla上的介绍。
xmlhttprequest level 2添加了一个新的接口formdata.利用formdata对象,我们可以通过javascript用一些键值对来模拟一系列表单控件,我们还可以使用xmlhttprequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用formdata的最大优点就是我们可以异步上传一个二进制文件.
所有主流浏览器的较新版本都已经支持这个对象了,比如chrome 7+、firefox 4+、ie 10+、opera 12+、safari 5+。
参见:https://developer.mozilla.org/zh-cn/docs/web/api/xmlhttprequest/formdata
这里只展示一个通过from表单来初始化formdata的方式
<form enctype="multipart/form-data" method="post" name="fileinfo">
js代码
var odata = new formdata(document.forms.nameditem("fileinfo" )); odata.append( "customfield", "this is some extra data" ); var oreq = new xmlhttprequest(); oreq.open( "post", "stash.php" , true ); oreq.onload = function(oevent) { if (oreq.status == 200) { ooutput.innerhtml = "uploaded!" ; } else { ooutput.innerhtml = "error " + oreq.status + " occurred uploading your file.<br />"; } }; oreq.send(odata);
参见:https://developer.mozilla.org/zh-cn/docs/web/guide/using_formdata_objects
使用formdata,进行ajax请求并上传文件
这里使用jquery,但是老版本的jquery比如1.2是不支持的,最好使用2.0或更新版本:
html代码
<form id= "uploadform"> <p >指定文件名: <input type="text" name="filename" value= ""/></p > <p >上传文件: <input type="file" name="file"/></ p> <input type="button" value="上传" onclick="doupload()" /> </form>
js代码
function doupload() { var formdata = new formdata($( "#uploadform" )[0]); $.ajax({ url: 'http://localhost:8080/cfjax_rs/rest/file/upload' , type: 'post', data: formdata, async: false, cache: false, contenttype: false, processdata: false, success: function (returndata) { alert(returndata); }, error: function (returndata) { alert(returndata); } }); }
以上所述是小编给大家介绍的通过ajax方式上传文件使用formdata进行ajax请求的全部叙述,希望对大家有所帮助