- 问题原因:
ie上传文件后,需要将文件名返回前台进行展示,但如果是中文则会直接乱码; 在本地运行代码无乱码,但将项目放到测试环境下运行出现乱码问题,故需解决; - 解决思路:
- 查看前台file传给后台时是否乱码;
- 查看后台返回给前台时,后台是否乱码;
- 查看前台接受返回值时,前台是否是乱码;
- 该篇讲述的是最后一种,解决方案:
后台代码:
import org.springframework.http.MediaType;
@RequestMapping(value="/upload",produces = MediaType.TEXT_PLAIN_VALUE)
@ResponseBody
public String upload(@RequestParam(value = "file", required = false) MultipartFile file) {
return "你好-我是学习好的小薛";
}
最主要的是:produces = MediaType.TEXT_PLAIN_VALUE
这个也可以解决返回json提示下载问题;返回值必须是String
*前台代码:* ie上传时,我用的是 $.ajaxFileUpload;
$.ajaxFileUpload({ //Jquery插件上传文件
url: url,
secureuri: false, //是否启用安全提交 默认为false
fileElementId: "btn_file", //type="file"的id
data: data,
dataType: "json", //返回值类型
success: function (res) {}
});
在插件的js当中找到以下代码,并将我的代码进行复制:
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" ){
// ----新增代码
data = r.responseText;
var start = data.indexOf(">");
if(start != -1) {
var end = data.indexOf("<", start + 1);
if(end != -1) {
data = data.substring(start + 1, end);
}
}
// ----新增代码
eval('data = " "+data+" " ');
}
// evaluate scripts within html
if ( type == "html" )
jQuery("<div>").html(data).evalScripts();
return data;
}
目的:因为ie会将后台返回的值当做错误进行处理,而且返回的值还被包裹了<pre></pre>
,所以我们要把这个标签给去掉,这样就会进入到success当中了;
以上代码也可以解决 返回数据跳转到error方法块问题;