昨天做项目的时候,利用Extjs4+springmvc文件上传,服务器端springmvc处理上传文件很顺利,只是当springmvc返回json数据给extjs时却产生了奇怪的异常:
Uncaught Ext.JSON.decode(): You're trying to decode an invalid JSON String:......
google了大半天,原来是extjs文件上传时对服务器端返回数据的处理问题:
File uploads are not performed using normal 'Ajax' techniques, that is they are not performed using XMLHttpRequests. Instead a hidden <form>
element containing all the fields is created temporarily and submitted with its target set to refer to a dynamically generated, hidden <iframe>
which is inserted into the document but removed after the return data has been gathered.
The server response is parsed by the browser to create the document for the IFRAME. If the server is using JSON to send the return object, then theContent-Type header must be set to "text/html" in order to tell the browser to insert the text unchanged into the document body.
关键在于红色字体部分,对于文件上传,服务器端返回json对象时,则Content-Type必须为“text/html”
其实Ajax只能够收发基于文本的数据,是不能够处理二进制数据的。之所以看上去能够“异步上传”,是因为Extjs针对包含上传的表单使用了iframe提交的方法,流程如下:
1.在页面创建一个iframe和隐藏的form,form的各字段和Extjs表单字段相同;
2.将form的target指向该iframe,并监听iframe的onload事件;
3.提交这个form,待iframe的onload事件触发后(加载完成),读取iframe的innerHtml,并保存到responseText;
4.默认情况下,尝试将responseText进行JSON解码;
5.根据解码结果,调用success或failure回调。
如此则只须修改springmvc的response的ContentType即可
首先想到的是这样:
@RequestMapping(value="/uploadPhoto",method=RequestMethod.POST)
public @ResponseBody
ExtjsResultBean uploadPhoto(UploadFileBean uploadFile,
BindingResult bindingResult, HttpServletRequest request,HttpServletResponse response){
response.setContentType("text/html");
}
好像这样不行,extjs接收的服务器端返回的还是"application/json",
幸好在stackoverflow上一兄弟说这样能解决:
在spring-mvc.xml中:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="com.wanghaisheng.bean.MyStringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
<property name="supportedMediaTypes">
<array>
<value>text/html</value>*******
<value>application/json</value>
</array>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
spring controller中:
@RequestMapping(value="/uploadPhoto",method=RequestMethod.POST,produces = MediaType.TEXT_HTML_VALUE)
public @ResponseBody
ExtjsResultBean uploadPhoto(UploadFileBean uploadFile,
BindingResult bindingResult, HttpServletRequest request,HttpServletResponse response){}
则顺利解决
分享到:
相关推荐
标题“extjs3+springMVC上传文件”指的是使用ExtJS 3版本的JavaScript库与Spring MVC框架结合实现文件上传功能。这篇博文可能是作者在ITEYE博客上分享的一个技术实践,遗憾的是,描述部分为空,没有提供额外的信息。...
在文件上传过程中,我们可以利用ExtJS的`Progress Bar`组件来模拟进度条效果,展示文件上传的实时进度。 2. **Ajax异步上传**:ExtJS支持使用Ajax进行文件的异步上传,这样可以在不刷新页面的情况下完成文件传输,...
ext上传组件的使用(结合springMvc),本人在项目中使用过的
3ExtJS的HtmlEditor的图片文件上传插件。 4Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5导入导出Excel数据,支持xlsx和xls文件。 6资源管理(菜单管理)。 7用户管理...
首先,在前端实现文件上传功能时,使用了Extjs4框架构建了一个表单面板(Ext.form.Panel),其中包含一个文件字段(xtype: 'filefield')。这个文件字段允许用户选择文件进行上传。页面会显示一个“请选择文件”的...
3、ExtJS的HtmlEditor的图片文件上传插件。 4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7...
在EXTJS应用中,这类功能通常使用EXTJS的文件上传组件和后台的文件管理系统相结合,提供用户友好的界面和强大的文件管理能力。 综合以上内容,这个EXTJS项目提供了一整套解决方案,包括前端UI、动态数据交互以及...
- **commons-fileupload.jar**: 用于支持文件上传功能。 - **commons-io.jar**: 提供了一系列IO操作的工具类。 - **commons-lang.jar / commons-lang3.jar**: 扩展了标准的Java语言工具类,提供了更多实用的方法。 -...
3、ExtJS的HtmlEditor的图片文件上传插件。 4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7...
在前端,我们可以创建一个HTML表单或者使用JavaScript库如ExtJS来构造文件上传界面。在JSP页面中,一个简单的例子如下: ```jsp 选择文件: 上传"> ``` 如果你使用ExtJS,可以创建一个文件输入组件并提交表单:...
根据提供的文件信息,本文将对“javassm源码Extjs4.0通用后台管理系统源码”进行深入解析,重点围绕其技术特点、应用场景及扩展性等方面展开。 ### javassm框架简介 #### JavaSSM JavaSSM是指基于Java语言开发的...
3、ExtJS的HtmlEditor的图片文件上传插件。 4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7...
* 文件上传工具和远程连接工具:需要了解文件上传工具和远程连接工具的基本概念和原则,包括FileZilla和PuTTY等工具。 * linux 基本操作:需要了解linux基本操作的基本概念和原则。 * 职业发展和职业生涯规划:需要...