问题一:后台接收到不上传的文件
jquery版本: 使用的jquery.form.js版本3.28.0
var ajaxFormOpt = {
url:’dispatchAction!saveFinishSummary.action?v=’+Math.random(),
type:’post’,
dataType:’json’,
success:function(responseText , statusText, xhr, form){
alert(“.”);
fileUpload = true;
},
error:function(){
}
};
//将表单设为ajax表单$
(“#form1”).ajaxForm(ajaxFormOpt);
// 绑定表单提交事件处理器$
(‘#form1’).submit(function() {$
(this).ajaxSubmit();
return false;// 为了防止普通浏览器进行表单提交返回false
});$
(‘#form’).submit();//提交表单
页面form表单,过程中遇到,在ie中必须在form指定action,否则提交时没有任何反应。在IE下测试,此处暂且指定action。
<form id="dispatch_finish_form" action="dispatchAction!saveFinishSummary.action" >
<input type="file" id="attachmentFile" name="attachmentFile" onchange="chooseFile()" />
</form>
后台接收文件部分代码:
private File[] attachmentFile;
private String[] attachmentFileFileName;
public File[] getAttachmentFile() {
return attachmentFile;
}
public void setAttachmentFile(File[] attachmentFile) {
this.attachmentFile = attachmentFile;
}
public String[] getAttachmentFileFileName() {
return attachmentFileFileName;
}
public void setAttachmentFileFileName(String[] attachmentFileFileName) {
this.attachmentFileFileName = attachmentFileFileName;
}
明明上传的是文件,但后台去调用set方法时参数却是String类型,导致找不到该方法而抛出异常。
这是第一个问题,解决办法,直接更新jquery.form版本到3.49就解决了。
下载位置
http://www.bootcdn.cn/jquery.form/
问题二:IE8下上传成功了,却弹出文件下载弹框。
通常情况下,我们ajax请求内容返回都是采用通用的写法,返回application/json数据格式,这种数据格式就导致在IE8下提示下载。
解决办法:针对ajaxForm表单提交,指定返回的数据格式text/html。
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type", "text/html");
response.getWriter().write("返回内容");