Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IE提示打开或保存来自服务器的json结果_Json_Spring_Internet Explorer_Blueimp - Fatal编程技术网

IE提示打开或保存来自服务器的json结果

IE提示打开或保存来自服务器的json结果,json,spring,internet-explorer,blueimp,Json,Spring,Internet Explorer,Blueimp,我正在使用blueimp fileupload插件,该插件在chrome中运行良好,但在IE10以下的IE中不起作用。我收到了打开或保存json结果的提示。搜索后,我尝试了一些解决方案。就像这里的一个:-,但没有运气 我正在使用Spring3.1,AngularJS。 在我的第一种方法中,我能够上传文件,尽管也会得到在IE中打开或保存json的提示 Content-Type application/json;charset=UTF-8 内容类型应用/json;charset=UTF-8返回的

我正在使用blueimp fileupload插件,该插件在chrome中运行良好,但在IE10以下的IE中不起作用。我收到了打开或保存json结果的提示。搜索后,我尝试了一些解决方案。就像这里的一个:-,但没有运气

我正在使用Spring3.1,AngularJS。 在我的第一种方法中,我能够上传文件,尽管也会得到在IE中打开或保存json的提示 Content-Type application/json;charset=UTF-8 内容类型应用/json;charset=UTF-8返回的输出Json为

ExcelUpload={UnprocessedRequests=12,AcceptedRequests=0, processedFlag=T,RejectedRequests=0,result=Excel_13} ExcelUpload={UnprocessedRequests=12,AcceptedRequests=0,processedFlag=T,RejectedRequests=0,result=Excel_13} Spring代码是

@RequestMapping(value = "/saveExcel", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> saveExcelDetails(@RequestParam(value="file",required=false) MultipartFile file,HttpServletRequest request, HttpServletResponse response) throws Exception {
    Map<String, Object> excelUpload = myService.saveExcelDetails(request,file);
    response.setHeader("Content-Type", "text/html; charset=utf-8");     
    return excelUpload;
} 
@RequestMapping(value=“/saveExcel”,method=RequestMethod.POST)
public@ResponseBody映射saveExcelDetails(@RequestParam(value=“file”,required=false)多部分文件文件、HttpServletRequest请求、HttpServletResponse响应)引发异常{
Map excelUpload=myService.saveExcelDetails(请求、文件);
setHeader(“内容类型”,“text/html;charset=utf-8”);
返回并上传;
} 
然后我尝试了第二种方法

@RequestMapping(value = "/saveExcel", method = RequestMethod.POST,**produces = "text/html"**)
public @ResponseBody Map<String, Object> saveExcelDetails(@RequestParam(value="file",required=false) MultipartFile file,HttpServletRequest request, HttpServletResponse response) throws Exception {
    Map<String, Object> excelUpload = myService.saveExcelDetails(request,file);     
    return excelUpload;
}
@RequestMapping(value=“/saveExcel”,method=RequestMethod.POST,**products=“text/html”**)
public@ResponseBody映射saveExcelDetails(@RequestParam(value=“file”,required=false)多部分文件文件、HttpServletRequest请求、HttpServletResponse响应)引发异常{
Map excelUpload=myService.saveExcelDetails(请求、文件);
返回并上传;
}
但获取错误为“找不到可接受的表示形式” 我是不是遗漏了什么

基于Iframe的上传要求JSON响应的内容类型为text/plain或text/html-如果Iframe响应设置为application/JSON,则会显示不需要的下载对话框。我们可以使用Accept标头为文件上传响应提供不同的内容类型

我怎样才能达到目标

使用Accept标头为文件上载响应提供不同的内容类型

在我的场景(代码)中

埃里克,我按照你的建议改了

public @ResponseBody Map<String, Object>saveExcelDetails(@RequestParam(value="file",required=false) MultipartFile file,HttpServletRequest request, HttpServletResponse response,@RequestHeader(value="Accept") String accept) throws Exception {
Map<String, Object> excelUpload = myService.saveExcelDetails(request,file);
   if (accept.indexOf("application/json") != -1) {         
        response.setContentType("application/json; charset=UTF-8");
    } else {           
        response.setContentType("text/plain");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Type","text/plain; charset=UTF-8");
    }
return excelUpload;
public@responseBy MapsaveExcelDetails(@RequestParam(value=“file”,required=false)多部分文件文件、HttpServletRequest请求、HttpServletResponse响应、@RequestHeader(value=“Accept”)字符串接受)引发异常{
Map excelUpload=myService.saveExcelDetails(请求、文件);
if(accept.indexOf(“application/json”)!=-1{
setContentType(“application/json;charset=UTF-8”);
}否则{
response.setContentType(“文本/普通”);
响应。setCharacterEncoding(“UTF-8”);
setHeader(“内容类型”,“文本/普通;字符集=UTF-8”);
}
返回并上传;
}


已将响应内容类型设置为“text/plain”,响应标题也设置为“text/plain”,但仍然不成功。

根据设计,如果将框架导航到返回
内容类型:application/json
的URL,IE将提示用户保存文件,因为IE不提供json的本机视图


在服务器端代码中,可以检查请求的
Accept
头。如果它不包含
application/json
,那么您应该返回
text/plain

这可能是因为@ResponseBody注释,我认为内容类型在设置为text/plain后重置为application/json。JacksonMessageConverter可能与此有关

我在Fiddler2中看到IE8在其Accept:header中不是发送application/json。在服务器端,我检查Accept头是否包含application/json。(顺便说一句,我只使用“contains()”而不是笨重的“IndexOf”),如果application/json不在Accept:header中,则将其替换为text/plain

但果不其然,响应Fiddler2会看到它有一个“application/json”的内容类型头

因此,在我将内容类型重置为文本/纯文本后,正在重置内容类型

我将尝试以下操作:

尝试以下代码:

<beans:bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <beans:property name="supportedMediaTypes">
        <beans:list>
            <beans:value>text/html;charset=UTF-8</beans:value>
        </beans:list>
    </beans:property>
</beans:bean>

<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <beans:property name="messageConverters">
        <beans:list>
            <beans:ref bean="mappingJacksonHttpMessageConverter" />
        </beans:list>
    </beans:property>
</beans:bean>

text/html;字符集=UTF-8

如果
标题(“X-Content-Type-Options”,“nosniff”),IE实际上会执行MIME检测并覆盖服务器对IE检测到的格式的响应。例如,出于安全目的,带有
text/html
标题的JSON响应将被
text/javascript
覆盖

参考:


  • 谢谢EircLaw,返回
    text/plain
    您的意思是
    setContentType(MediaType.text\u plain)
    。这样看起来就可以了。您可以使用Fiddler或其他网络调试器进行确认;setHeader(“内容类型”,“文本/普通;字符集=UTF-8”)仍在获取内容类型=应用程序/json;IEIt中的charset=UTF-8可能最好更新原始问题中的代码,以显示完整的代码块,包括“if”测试等。我不知道“仍然没有运气”是什么意思。当你看IE使用Fiddler时,内容类型是什么?这对我很有用。除了一个例外——我使用的是“text/plain”而不是“text/html”。目前,#3(上面)已经死了;然而,WayBack从2015年9月14日起将其命名为“Internet Explorer MIME处理强制执行”。