六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 45|回复: 0

用jQuery和Spring做ajax文件上传应该注意的一个问题!

[复制链接]

升级  52%

4

主题

4

主题

4

主题

童生

Rank: 1

积分
26
 楼主| 发表于 2013-1-29 11:35:23 | 显示全部楼层 |阅读模式
我自从用了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个钟头,引以为戒啊!
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表