ajax文件上传怎么传其他参数,Ajax进行文件与其他参数的上传功能
光启元
转载
关注
0点赞·945人阅读
记得前一段时间,为了研究Ajax文件上传,找了很多资料,在网上看到的大部分是form表单的方式提交文件,对于Ajax方式提交文件并且也要提交表单中其他数据,发现提及的并不是很多,后来在同事的帮助下,使用ajaxfileupload最终完成了文件上传与其他提交的操作,现在分享给大家,希望大家能有有所帮助。本文主要介绍了使用Ajax进行文件与其他参数的上传功能(java开发),非常不错,具有参考借鉴价值,需要的朋友参考下吧,希望能帮助到大家。
文件上传:
操作步骤:
1 导入jar包:
我们在使用文件上传时,需要使用到两个jar包,分别是commons-io与commons-fileupload,在这里我使用的两个版本分别是2.4与1.3.1版本的,需要使用JS文件与jar包最后会发给大家一个连接(如何失效请直接我给留言,我会及时更改,谢谢)。
2 修改配置文件:
当我们导入的jar包是不够的,我们需要使用到这些jar包,由于我当时使用的是SSM框架,所以我是在application-content.xml中配置一下CommonsMultipartResolver,具体配置方法如下:
104857600
4096
3 JSP文件:
大家对form表单提交问价的方式很熟悉,但是我们有很多情况下并不能直接使用form表单方式直接提交。这时候我们就需要使用Ajax方式提交,Ajax有很多的好处,比如当我们不需要刷新页面获希望进行局部刷新的时候,我们就可以使用Ajax。
function saveUser() {
var file = document.getElementById("file").files[0]
//原生ajax实现文件上传
var formData = new FormData()
if (file) {
formData.append("file", file)
console.log(file)
}
//得到xhr对象
var xhr = null
if (XMLHttpRequest) {
xhr = new XMLHttpRequest()
} else {
xhr = new ActiveXObject("Microsoft.XMLHTTP")
}
xhr.open("post", "http://www-test.mianyazhu.com/supplier/fileSupplier/file/upload/supplier", true)//设置提交方式,url,异步提交
// xhr.setRequestHeader("Content-Type","multipart/form-data")
xhr.onload = function () {
var data = xhr.responseText //得到返回值
console.log(data)
}
xhr.send(formData)
}
引入ajaxfileupload.js
jQuery.extend({createUploadIframe: function(id, uri)
{
//create frame
var frameId = 'jUploadFrame' + id
if(window.ActiveXObject) {
var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />')
if(typeof uri== 'boolean'){
io.src = 'javascript:false'
}
else if(typeof uri== 'string'){
io.src = uri
}
}
else {
var io = document.createElement('iframe')
io.id = frameId
io.name = frameId
}
io.style.position = 'absolute'
io.style.top = '-1000px'
io.style.left = '-1000px'
document.body.appendChild(io)
return io
},
createUploadForm: function(id, fileElementId)
{
//create form
var formId = 'jUploadForm' + id
var fileId = 'jUploadFile' + id
var form = $('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>')
var oldElement = $('#' + fileElementId)
var newElement = $(oldElement).clone()
$(oldElement).attr('id', fileId)
$(oldElement).before(newElement)
$(oldElement).appendTo(form)
//set attributes
$(form).css('position', 'absolute')
$(form).css('top', '-1200px')
$(form).css('left', '-1200px')
$(form).appendTo('body')
return form
},
addOtherRequestsToForm: function(form,data)
{
// add extra parameter
var originalElement = $('<input type="hidden" name="" value="">')
for (var key in data) {
name = key
value = data[key]
var cloneElement = originalElement.clone()
cloneElement.attr({'name':name,'value':value})
$(cloneElement).appendTo(form)
}
return form
},
ajaxFileUpload: function(s) {
// TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
s = jQuery.extend({}, jQuery.ajaxSettings, s)
var id = new Date().getTime()
var form = jQuery.createUploadForm(id, s.fileElementId)
if ( s.data ) form = jQuery.addOtherRequestsToForm(form,s.data)
var io = jQuery.createUploadIframe(id, s.secureuri)
var frameId = 'jUploadFrame' + id
var formId = 'jUploadForm' + id
// Watch for a new set of requests
if ( s.global && ! jQuery.active++ )
{
jQuery.event.trigger( "ajaxStart" )
}
var requestDone = false
// Create the request object
var xml = {}
if ( s.global )
jQuery.event.trigger("ajaxSend", [xml, s])
// Wait for a response to come back
var uploadCallback = function(isTimeout)
{
var io = document.getElementById(frameId)
try
{
if(io.contentWindow)
{
xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null
xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document
}else if(io.contentDocument)
{
xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null
xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document
}
}catch(e)
{
jQuery.handleError(s, xml, null, e)
}
if ( xml || isTimeout == "timeout")
{
requestDone = true
var status
try {
status = isTimeout != "timeout" ? "success" : "error"
// Make sure that the request was successful or notmodified
if ( status != "error" )
{
// process the data (runs the xml through httpData regardless of callback)
var data = jQuery.uploadHttpData( xml, s.dataType )
// If a local callback was specified, fire it and pass it the data
if ( s.success )
s.success( data, status )
// Fire the global callback
if( s.global )
jQuery.event.trigger( "ajaxSuccess", [xml, s] )
} else
jQuery.handleError(s, xml, status)
} catch(e)
{
status = "error"
jQuery.handleError(s, xml, status, e)
}
// The request was completed
if( s.global )
jQuery.event.trigger( "ajaxComplete", [xml, s] )
// Handle the global AJAX counter
if ( s.global && ! --jQuery.active )
jQuery.event.trigger( "ajaxStop" )
// Process result
if ( s.complete )
s.complete(xml, status)
jQuery(io).unbind()
setTimeout(function()
{ try
{
$(io).remove()
$(form).remove()
} catch(e)
{
jQuery.handleError(s, xml, null, e)
}
}, 100)
xml = null
}
}
// Timeout checker
if ( s.timeout > 0 )
{
setTimeout(function(){
// Check to see if the request is still happening
if( !requestDone ) uploadCallback( "timeout" )
}, s.timeout)
}
try
{
// var io = $('#' + frameId)
var form = $('#' + formId)
$(form).attr('action', s.url)
$(form).attr('method', 'POST')
$(form).attr('target', frameId)
if(form.encoding)
{
form.encoding = 'multipart/form-data'
}
else
{
form.enctype = 'multipart/form-data'
}
$(form).submit()
} catch(e)
{
jQuery.handleError(s, xml, null, e)
}
if(window.attachEvent){
document.getElementById(frameId).attachEvent('onload', uploadCallback)
}
else{
document.getElementById(frameId).addEventListener('load', uploadCallback, false)
}
return {abort: function () {}}
},
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" )
{
// If you add mimetype in your response,
// you have to delete the '<pre></pre>' tag.
// The pre tag in Chrome has attribute, so have to use regex to remove
var data = r.responseText
var rx = new RegExp("<pre.*?>(.*?)</pre>","i")
var am = rx.exec(data)
//this is the desired data extracted
var data = (am) ? am[1] : "" //the only submatch or empty
eval( "data = " + data )
}
// evaluate scripts within html
if ( type == "html" )
jQuery("<div>").html(data).evalScripts()
//alert($('param', data).each(function(){alert($(this).attr('value'))}))
return data
}
})
2.引入上传文件所需的jar
3.配置servlet.xml(不是web.xml)
4.jsp上传框
5.ajax传文件到后台
6.后台接收文件
7.获取之后怎么处理自己看着办咯,我只能帮到这里了