ajaxFileUpload 多文件上传 获取不到动态添加file

我是小小小小程序媛 2014-08-28 04:17:10
开发框架:springMVC+Hibernate。
问题描述:由于涉及到多文件上传,所以我通过JS在页面上可以生成多个file控件(原页面有一个不是JS动态生成,是手写上的)。现在的问题是:当我通过JS生成了多个file控件后,并选择了需要上传的文件,然后点击上传按钮,可接下来发生的事情就奇怪了,因为上传成功的只是原页面的那个file控件里的文件,而通过JS动态生成的file控件里的文件都没上传成功,搁在那里不动弹了。
预期效果:原页面的file控件里的文件和通过JS动态生成的file控件里的文件,点击上传按钮后,都能上传成功。
下面就展示下我的代码块,从前端开始。
动态生成file控件的JS代码:

function createfile(tagName,type,name)
{
var element = null;
try{

element=document.createElement('input');
//element.setAttribute('type', 'file');
element.type="file";
//element.setAttribute('name', 'file');
element.name="file";
//element.setAttribute('id', name);
element.id=name;
//element.style.cssText="BORDER: #91c0e3 1px solid; width:77%;HEIGHT: auto; BACKGROUND-COLOR: #FFFFFF;color: #004779;";
element.style.border="#91c0e3 1px solid";
element.style.width="77%";
element.style.height="auto";
//element.style.background-color="#FFFFFF";
element.style.color="#004779";
}catch(e)
{
}

return element;
}
var k=1;
function add()
{
var j=k-1;
var tagname="upload"+j;
var upload=document.getElementById(tagname).value;
if(upload=="")
{
alert("上传文件未满,不需要增加上传栏");
return false;
}
var name="upload"+k;
var file=createfile("input","file",name);
var br = document.createElement("<br />");
var files = document.getElementById("files");
files.appendChild(br);
files.appendChild(file);
k++;

}

页面代码块:

<div id="files">
<input type="file" name="file" id="upload0" alt="选择文件" style="BORDER: #91c0e3 1px solid; width:77%;HEIGHT: auto; BACKGROUND-COLOR: #FFFFFF;color: #004779;"/>
<input type="button" onclick="add();" value="增加" alt="添加文件域" class="DotButton"/>
</div>
<input type="button" value="上传" class="DotButton" onclick="upload()"/>
<div id="project_document"></div>


文件上传的JS代码块:

function upload(){

var fileName=document.getElementById("files").getElementsByTagName("input"); //得到name为file的控件
var arrId=new Array(); //定义一个ID数组

for(var j=0;j<fileName.length-1;j++){
if(fileName[j]!=""){ //当file控件里的值不为空时就往ID数组里塞值
arrId[j]="upload"+j;
}
}

$.ajaxFileUpload({
type: "POST", //提交方式
url:'manyFileUpload.bia',
secureuri:false,
fileElementId:arrId,
dataType: 'text/html',
success:function(data,status){

var json=eval(data);
var messageDiv=document.getElementById("project_document");
for(var i=0;i<json.length;i++){
messageDiv.innerHTML+="<input type='hidden' name='project_document' value="+json[i].customer_descr+"/>";
}
messageDiv.innerHTML+="<TD> <FONT COLOR=#ff0000>上传成功</FONT></TD>";
},
error : function(data, status, e) {
alert("系统报错,稍后重试!");
}
});
}


文件上传的后台java代码块:

//多文件上传
@RequestMapping(value="project/manyFileUpload",method = RequestMethod.POST)
@ResponseBody
public List<Customer> manyFileUpload(MultipartHttpServletRequest request,String project_no){

DefaultMultipartHttpServletRequest defaultRequest = (DefaultMultipartHttpServletRequest)request;
MultiValueMap<String, MultipartFile> fileMap = defaultRequest.getMultiFileMap();
List<MultipartFile> files = fileMap.get("file");//得到页面的file
Customer customer=new Customer();

for (int i = 0; i < files.size(); i++) {
String webpath = ManyFileUpload.saveWebImgFile(files.get(i),request);//后台进行上传
customer.setCustomer_descr(webpath);//将文件上传信息存储到数据库
}

List<Customer> customerList = new ArrayList<Customer>();
customerList.add(customer);
return customerList;
}


望各位大神赐教,给小弟建议,测试可行,立马给分。
...全文
1024 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31148811 2016-08-22
  • 打赏
  • 举报
回复
楼主 ,源码改了 还是接受不到file控件的内容
//  var oldElement = jQuery('#' + fileElementId);
//  var newElement = jQuery(oldElement).clone();
//  jQuery(oldElement).attr('id', fileId);
//  jQuery(oldElement).before(newElement);
//  jQuery(oldElement).appendTo(form);
  if(typeof(fileElementId) == 'string'){
	  fileElementId = [fileElementId];
  }
  for(var i in fileElementId){ 
	  var oldElement = jQuery('#' + fileElementId[i]); 
	  var newElement = jQuery(oldElement).clone(); 
	  jQuery(oldElement).attr('id', fileId); 
	  jQuery(oldElement).before(newElement); 
	  jQuery(oldElement).appendTo(form); 
  }
alwaysgoodman 2016-08-03
  • 打赏
  • 举报
回复
楼主,您的问题是如何解决的,我也遇到了同样的问题,获取不到动态添加的file,请帮忙指点一下。
zhou_woniu 2016-07-04
  • 打赏
  • 举报
回复
我也遇到了这个问题。我把源码改了 还是接受不到file控件的内容,是怎么回事~~求指教
yzzhouyalei 2014-11-12
  • 打赏
  • 举报
回复
我也遇到这个问题了,怎么搞,后台都获取不到文件
Cute_Tiger 2014-08-29
  • 打赏
  • 举报
回复
引用 5 楼 JAVA_LiuTe 的回复:
经过小弟的不懈努力,证明是上传文件的插件源码问题,修改源码后,已经圆满解决这问题。
源码的什么问题?
  • 打赏
  • 举报
回复
经过小弟的不懈努力,证明是上传文件的插件源码问题,修改源码后,已经圆满解决这问题。
huasuoworld 2014-08-28
  • 打赏
  • 举报
回复
看看是不是同name导致的

element.name=name;
//element.setAttribute('id', name);
element.id=name;
旺仔嘎嘎 2014-08-28
  • 打赏
  • 举报
回复
版主慢慢撸哈
  • 打赏
  • 举报
回复
来人呀,要死人啦,别沉咯。
  • 打赏
  • 举报
回复
请上天赐给我一个可行的idea吧。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧