我的表单中有一个文件域。当我通过控制器提交表单时,IE会显示安全栏,提示我正在尝试将文件下载到计算机上,这与我正在做的事情(我正在上传文件)完全相反。当我使用FF向服务器提交表单时,一切都运行得很好。但是IE8和ie9出现了一个问题。
控制器操作:
var myForm = Ext.getCmp('uploaddraftpcpPanel').getForm(); // get the basic form
if (myForm.isValid()) { // make sure the form contains valid data before submitting
myForm.submit({
headers: {
enctype: 'multipart/form-data; charset=UTF-8'
},
url: 'upload/uploaddraftpcp.action',
success: function (myForm, action) {
Ext.Msg.alert('success', "success");
},
failure: function (myForm, action) {
Ext.Msg.alert('Failed', "failed");
}
});
} else { // display error alert if the data is invalid
Ext.Msg.alert('Invalid Data', 'Please correct form errors.');
}服务器端代码如下所示:
@RequestMapping(value = "/upload/uploaddraftpcp.action", method = RequestMethod.POST)
public @ResponseBody
Map<String, ? extends Object> uploadDraftpcp(HttpServletRequest request){
Map<String, Object> modelMap = new HashMap<String, Object>(2);
try {
System.out.println("title pcp" + request.getParameter("title"));
System.out.println("description pcp"
+ request.getParameter("description"));
// response.setContentType("text/html");
modelMap.put("message", "Successfully submitted Form");
modelMap.put("success", true);
return modelMap;
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return ExtJSReturn
.mapError("Error retrieving data.");
}
}发布于 2015-04-03 14:28:04
In Ext JS,文件上传不是使用普通的'Ajax‘技术执行的,也就是说,它们不是使用XMLHttpRequests执行的。相反,临时创建包含所有字段的隐藏元素,并将其目标设置为引用动态生成的隐藏元素,该元素被插入到文档中,但在收集返回数据后被删除。
服务器响应由浏览器解析,为IFRAME创建文档。如果服务器使用JSON发送返回对象,则必须将Content-Type标头设置为text/html,以便告知浏览器将未更改的文本插入到文档正文中。
当它们在响应头中看到Content-Type = application/json时,Chrome、FF、IE10和up就会执行此操作。但是,当您对IE8和IE9执行此操作时,当服务器响应文件上传时,您会看到一条消息,内容大致如下:“您想打开还是保存此文档”?
因此,要在IE8和IE9中解决这个问题,只需将Content-Type设置为text/html即可。现代浏览器的响应都是一样的,所以这个解决方案不会破坏任何东西。
https://stackoverflow.com/questions/23203813
复制相似问题