欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

form+iframe上传文件返回json在IE下提示下载的问题(源于ueditor的错误)

程序员文章站 2022-04-21 13:25:32
...

     最近做系统的时候需要富文本编辑器,考察了很多,最后还是回头找ueditor亲密接触。至于如何将ueditor彻底放入我系统,而不是使用controller.jsp之类的文件转发的方式,将另起文章讨论。这里就遇到的单图上传返回json的时候IE提示下载的问题做解决方法的分析。我使用的是springmvc.

     现象:多图上传成功,但单图上传成功后直接图片不回显,IE提示下载upload.do文件(实际是我后台处理文件上传的class),且consol报系统连续运行后台上传文件处理方法三次,第一次成功后绑定request上下文再运行两次。

     结论:IE10以下版本对application/json类型数据支持力度不够,近几年直接返回json越来越流行,才导致各大浏览器通吃json,早期版本并不支持,直接就提示下载或保存。

     解决方法:在web.xml配置DispatcherServletd时指定的文件中(我指定的是spring-mvc.xml)加上返回对象时自动解析为json的配置:

 <!-- 避免IE在ajax请求时,返回json出现下载 此处配置与<context:annotation-config /><mvc:annotation-driven>配合使用效果一样-->
   <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"	p:ignoreDefaultModelOnRedirect="true" >
   		<property name="messageConverters">	
   			<list>					
   				<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">    
			        <property name="supportedMediaTypes">
			            <list>
			                <value>text/html;charset=UTF-8</value>
			                <value>application/json;charset=UTF-8</value>
			            </list>
			        </property>
			    </bean>	
   			</list>			
   		</property>		
   	</bean>

 然后运行完美了。实际上这里的意思是用jackson自动将返回的各种对象转换成json。

         其实这个配置和<context:annotation-config /><mvc:annotation-driven/>配合使用效果一样的,如果还想使用jackson解析,那么可以这么写

 

<context:annotation-config /> 
<mvc:annotation-driven>
   	<mvc:message-converters register-defaults="true">			
   		<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" p:supportedMediaTypes="*/*" />		
   	</mvc:message-converters>
</mvc:annotation-driven>

 这就更简练了。

  实际上这俩是一样的,在<context:annotation-config />加载的时候会加载一些spring自己的东西,其中就有  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter,所以意思是一样的。

这样配置了之后,ueditor使用,以及在form下隐藏iframe提交文件的时候返回json运行就很好了。