要注意上传完成后清空file input的值,不然再次点击的时候change事件会在firefox下有bug
JSP页面中引入的script代码<script>
function
ajaxFileUpload()
{
$("#loading").ajaxStart(function(){
$(this).show()
})//开始上传文件时显示一个图片
.ajaxComplete(function(){
$(this).hide()
})//文件上传完成将图片隐藏起来
$.ajaxFileUpload({
url:'AjaxImageUploadAction.action',//用于文件上传的服务器端请求地址
secureuri:false,//一般设置为false
fileElementId:'imgfile',//文件上传空间的id属性
<input
type="file"
id="imgfile"
name="file"
/>
dataType:
'json',//返回值类型
一般设置为json
success:
function
(data,
status)
//服务器成功响应处理函数
{
alert(data.message)//从服务器返回的json中取出message中的数据,其中message为在struts2中定义的成员变量
if(typeof(data.error)
!=
'undefined')
{
if(data.error
!=
'')
{
alert(data.error)
}else
{
alert(data.message)
}
}
},
error:
function
(data,
status,
e)//服务器响应失败处理函数
{
alert(e)
}
}
)
return
false
}
</script>
struts.xml配置文件中的配置方法:
<struts>
<package
name="struts2"
extends="json-default">
<action
name="AjaxImageUploadAction"
class="com.test.action.ImageUploadAction">
<result
type="json"
name="success">
<param
name="contentType">text/html</param>
</result>
<result
type="json"
name="error">
<param
name="contentType">text/html</param>
</result>
</action>
</package>
</struts>
上传处理的Action
ImageUploadAction.action
package
com.test.action
import
java.io.File
import
java.io.FileInputStream
import
java.io.FileOutputStream
import
java.util.Arrays
import
org.apache.struts2.ServletActionContext
import
com.opensymphony.xwork2.ActionSupport
@SuppressWarnings("serial")
public
class
ImageUploadAction
extends
ActionSupport
{
private
File
imgfile
private
String
imgfileFileName
private
String
imgfileFileContentType
private
String
message
=
"你已成功上传文件"
public
File
getImgfile()
{
return
imgfile
}
public
void
setImgfile(File
imgfile)
{
this.imgfile
=
imgfile
}
public
String
getImgfileFileName()
{
return
imgfileFileName
}
public
void
setImgfileFileName(String
imgfileFileName)
{
this.imgfileFileName
=
imgfileFileName
}
public
String
getImgfileFileContentType()
{
return
imgfileFileContentType
}
public
void
setImgfileFileContentType(String
imgfileFileContentType)
{
this.imgfileFileContentType
=
imgfileFileContentType
}
public
String
getMessage()
{
return
message
}
public
void
setMessage(String
message)
{
this.message
=
message
}
@SuppressWarnings("deprecation")
public
String
execute()
throws
Exception
{
String
path
=
ServletActionContext.getRequest().getRealPath("/upload/mri_img_upload")
String[]
imgTypes
=
new
String[]
{
"gif",
"jpg",
"jpeg",
"png","bmp"
}
try
{
File
f
=
this.getImgfile()
String
fileExt
=
this.getImgfileFileName().substring(this.getImgfileFileName().lastIndexOf(".")
+
1).toLowerCase()
/*
if(this.getImgfileFileName().endsWith(".exe")){
message="上传的文件格式不允许!!!"
return
ERROR
}*/
/**
*
检测上传文件的扩展名是否合法
*
*/
if
(!Arrays.<String>
asList(imgTypes).contains(fileExt))
{
message="只能上传
gif,jpg,jpeg,png,bmp等格式的文件!"
return
ERROR
}
FileInputStream
inputStream
=
new
FileInputStream(f)
FileOutputStream
outputStream
=
new
FileOutputStream(path
+
"/"+
this.getImgfileFileName())
byte[]
buf
=
new
byte[1024]
int
length
=
0
while
((length
=
inputStream.read(buf))
!=
-1)
{
outputStream.write(buf,
0,
length)
}
inputStream.close()
outputStream.flush()
}
catch
(Exception
e)
{
e.printStackTrace()
message
=
"文件上传失败了!!!!"
}
return
SUCCESS
}
}
转载,仅供参考。
我给你出个招,我在struts1里面用的很好,你把运行完action得到的json对象保存在session里面,然后让这个action跳转到一个jsp页面,之后在这个jsp页面中把他取出来,这样就可以把json对象传给ajax了,说明白了吗?欢迎分享,转载请注明来源:内存溢出
评论列表(0条)