我自从用了jQuery之后,操作html基本就靠$('#XXX')了。但是这几天重构代码,发现一个文件上传功能却莫名其妙的出错了。
我后台用的是Spring(IOC+MVC)+Hibernate,前端用jQuery+ajaxfileupload插件。这个程序原来是好好的,可不知被我改了哪,居然不响应了。
重新回顾一下全过程:
1.html表单
<div id="add_document_form">
<ul>
<li>
<p>分类:</p>
<select id="document_category" required="true">
<option value="diya">抵押贷款</option>
<option value="zhiya">质押贷款</option>
<option value="xinyong">信用贷款</option>
<option value="danbao">担保贷款</option>
</select>
</li>
<li>
<p>文件:</p>
<input id="select_document" type="file" required="true" />
</li>
</ul>
</div>
2.配置Spring MVC
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
default-lazy-init="false" default-autowire="byName">
<!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
<context:component-scan base-package="org.dreamworker.**.controller" />
<!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- 文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
</beans>
3.创建Controller,我已经把请求转发到Servic了。(简化版)
/**
* 上传文件
* @param inputId input控件的id
* @param request
* @return
*/
public void doUpLoadFile(String inputId, HttpServletRequest request){
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
String fileDir = "e:\\dreamworker\\crm\\" + user.getName() + "\\";//文件存放目录
FileTools.addFolder(fileDir);
CommonsMultipartFile cFile = (CommonsMultipartFile) multipartRequest.getFile(inputId);//获取上传文件
if(null != cFile){
if(!cFile.isEmpty()){
//上传文件
String uuid = new Long(UUID.randomUUID().getMostSignificantBits()).toString();
File uploadedFile = new File(fileDir + uuid);
FileCopyUtils.copy(cFile.getBytes(), uploadedFile);
}
}
}
应该都配好了吧,现在可以上传了:
$.ajaxFileUpload({
url:'/crm/document.do?method=upLoadDocument&inputId='+inputId,
secureuri:false,
fileElementId:'select_document',
dataType: 'JSON',
success: function (json, status)
{
if(json.indexOf('<pre>') != -1) {
json = json.substring(5, json.length-6);
}
eval("json=" + json);
if('ok' == json.state){
alert('上传成功,你可以在['+json.categoryRemark+']菜单中查看更新!');
}else{
alert(json.msg);
}
}
});
可结果却是莫名其妙,debug发现没有获取到上传的文件。崩溃,回顾整个流程,应该没问题啊!难道是Spring升级后API变了?在查阅文档后,我确定,问题还在上面代码上。继续无奈!!!
终于在逐行核对代码后,我找到了问题的终结。原来是html表单里面input标签没有设置"name"属性值的原因。
我原先写的是:
<input id="select_document" type="file" required="true" />
其实应该写成:
<input id="select_document" name="select_document" type="file" required="true" />
我估计是ajaxfileupload插件的问题,一个小小的疏忽,竟然让我纠缠了5、6个钟头,引以为戒啊!

被折叠的 条评论
为什么被折叠?



