上传文件 IE不兼容的问题[提示下载保存]
2017-05-10 18:58
453 查看
转自:http://blog.csdn.net/u012116457/article/details/49531863
在使用Extjs做文件上传时,其他浏览器没有问题,但IE却一个劲提示保存文件,看服务端运行,它其实是运行成功了已经,但客户端的进度条却一个劲的在加载。
原因是:
IE浏览器对Content-Type = application/json,会出现下载保存
IE浏览器对Content-Type = text/html,返回信息按html处理
所以我们需要在代码中改变response的返回值来使IE上可以正常的运行:
JS代码:
[javascript] view
plain copy
var importform = new Ext.form.FormPanel({
labelAlign : 'right',
fileUpload:true,
items : [ {
xtype : 'filefield',
id:'upFile',
name : 'file',
fieldLabel : '导入',
labelStyle : "text-align:right;",
4000
labelWidth : 50,
msgTarget : 'side',
allowBlank : false,
anchor : '100%',
buttonText : '选择文件'
} ],
buttonAlign : 'center',
buttons : [ {
text : '上传',
handler : function() {
if (importform.form.isValid()) {
importform.getForm().submit({
url : 'forecast/importForecast',
waitMsg : '正在提交数据',
waitTitle : '提示',
success : function(response, options) {
var message = options.result.message;
if(message == "ok"){
Ext.Msg.alert('提示', "上传成功");
}else if(message == "ver"){
Ext.Msg.alert('提示', "请检查版本号是否正确");
}else if(message == "type"){
Ext.Msg.alert('提示', "你上传的文件类型错误");
}
importWin.hide();
deliveryStore.reload();
13c86
},
failure : function(response, options) {
Ext.Msg.alert('失败', '导入文件失败');
}
});
}
}
}, {
text : '重置',
handler : function() {
importform.getForm().reset();
}
}, {
text : '取消',
handler : function() {
importform.getForm().reset();
importWin.hide();
}
} ]
});
controller代码:
[java] view
plain copy
/**
* 上传 即导入数据
* @param file
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/importForecast")
public ResponseEntity<String> importForecast(@RequestParam MultipartFile file,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Map<String,String> map = new HashMap();
map.put("roleId", request.getSession().getAttribute("roleId").toString());
String result = "";
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.TEXT_HTML);
try {
String fileName = file.getOriginalFilename();
long size = file.getSize();
if (!(fileName == null || fileName.equals("")) && size > 0) {
DmtTsUser user = (DmtTsUser) request.getSession().getAttribute(
"user");
result = forecastService.importForecast(file,
fileName, map);
}
} catch (Exception e) {
e.printStackTrace();
}
String json = "{\"success\":true,\"message\":\""+result+"\"}";
return new ResponseEntity<String>(json, responseHeaders, HttpStatus.OK);
}
try的部分是具体的实现文件上传的代码
本人的前端不是ext所写,也有此问题,主要出现在有上传文件的接口。
规避此问题的关键代码部分:
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.TEXT_HTML);
String json = "{\"success\":true,\"message\":\""+result+"\"}";
return new ResponseEntity<String>(json, responseHeaders, HttpStatus.OK);
在使用Extjs做文件上传时,其他浏览器没有问题,但IE却一个劲提示保存文件,看服务端运行,它其实是运行成功了已经,但客户端的进度条却一个劲的在加载。
原因是:
IE浏览器对Content-Type = application/json,会出现下载保存
IE浏览器对Content-Type = text/html,返回信息按html处理
所以我们需要在代码中改变response的返回值来使IE上可以正常的运行:
JS代码:
[javascript] view
plain copy
var importform = new Ext.form.FormPanel({
labelAlign : 'right',
fileUpload:true,
items : [ {
xtype : 'filefield',
id:'upFile',
name : 'file',
fieldLabel : '导入',
labelStyle : "text-align:right;",
4000
labelWidth : 50,
msgTarget : 'side',
allowBlank : false,
anchor : '100%',
buttonText : '选择文件'
} ],
buttonAlign : 'center',
buttons : [ {
text : '上传',
handler : function() {
if (importform.form.isValid()) {
importform.getForm().submit({
url : 'forecast/importForecast',
waitMsg : '正在提交数据',
waitTitle : '提示',
success : function(response, options) {
var message = options.result.message;
if(message == "ok"){
Ext.Msg.alert('提示', "上传成功");
}else if(message == "ver"){
Ext.Msg.alert('提示', "请检查版本号是否正确");
}else if(message == "type"){
Ext.Msg.alert('提示', "你上传的文件类型错误");
}
importWin.hide();
deliveryStore.reload();
13c86
},
failure : function(response, options) {
Ext.Msg.alert('失败', '导入文件失败');
}
});
}
}
}, {
text : '重置',
handler : function() {
importform.getForm().reset();
}
}, {
text : '取消',
handler : function() {
importform.getForm().reset();
importWin.hide();
}
} ]
});
controller代码:
[java] view
plain copy
/**
* 上传 即导入数据
* @param file
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/importForecast")
public ResponseEntity<String> importForecast(@RequestParam MultipartFile file,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Map<String,String> map = new HashMap();
map.put("roleId", request.getSession().getAttribute("roleId").toString());
String result = "";
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.TEXT_HTML);
try {
String fileName = file.getOriginalFilename();
long size = file.getSize();
if (!(fileName == null || fileName.equals("")) && size > 0) {
DmtTsUser user = (DmtTsUser) request.getSession().getAttribute(
"user");
result = forecastService.importForecast(file,
fileName, map);
}
} catch (Exception e) {
e.printStackTrace();
}
String json = "{\"success\":true,\"message\":\""+result+"\"}";
return new ResponseEntity<String>(json, responseHeaders, HttpStatus.OK);
}
try的部分是具体的实现文件上传的代码
本人的前端不是ext所写,也有此问题,主要出现在有上传文件的接口。
规避此问题的关键代码部分:
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.TEXT_HTML);
String json = "{\"success\":true,\"message\":\""+result+"\"}";
return new ResponseEntity<String>(json, responseHeaders, HttpStatus.OK);
相关文章推荐
- Extjs 上传文件 IE不兼容的问题[提示下载保存]
- Extjs 上传文件 IE不兼容的问题[提示下载保存]
- 解决ie下ajaxsubmit上传文件提示下载文件问题
- form+iframe上传文件返回json在IE下提示下载的问题(源于ueditor的错误)(从ITEYE搬家过来的)
- 解决ie下ajaxsubmit上传文件提示下载文件问题
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- 解决IE下AjaxSubmit上传文件提示下载文件问题
- 文件上传一些事(ie8/9下提示下载json文件)
- IE兼容模式文件上传所遇问题解决
- DWZ框架在IE下进行文件上传,提醒JSON文件下载问题
- IE下载文件,没有提示保存的解决方法(zz)
- ajaxsubmit 上传文件 在IE中返回的内容 提示下载文件
- jquery的ajaxForm在IE上传文件后返回json显示"文件下载"问题
- ajaxfileUpload.js 上传文件 IE浏览器提示下载json的问题
- Jquery form.js文件上传返回JSON数据,在IE下提示下载文件的解决办法,并对返回数据进行正确的解析
- struts2+extjs文件上传,提示下载问题解决
- Selenium2自动化测试:让Firefox无提示地上传、下载保存文件
- spring3.0.5MVC 文件下载IE提示无法下载问题解决
- ajaxFileUpload上传文件时IE浏览器弹出下载提示问题处理