问题描述
html<inputtype="file"name="files"multiple="multiple"/>实现多图片上传,为什么只能接到一个图片,在后台(mvc)中如何接收<p><label>请选择一个图像文件:</label><inputtype="file"multiple="multiple"id="demo_input"name="f[]"/></p><divid="demo_result"></div><scripttype="text/javascript">varresult=document.getElementById("demo_result");varinput=document.getElementById("demo_input");if(typeofFileReader==='undefined'){result.innerHTML="<pclass='warn'>抱歉,你的浏览器不支持FileReader</p>";input.setAttribute('disabled','disabled');}else{input.addEventListener('change',readFile,false);}functionreadFile(){for(vari=0;i<this.files.length;i++){varfile=this.files[i];if(!/image/w+/.test(file.type)){alert("请确保文件为图像类型");returnfalse;}varreader=newFileReader();reader.readAsDataURL(file);reader.onload=function(e){result.innerHTML+='<imgstyle="width:100px;height:100px"src="'+this.result+'"alt=""/>';document.getElementById("h").value+=this.result+'|';}}};</script>
解决方案
解决方案二:
IList<System.Web.HttpPostedFileBase>fileList=Request.Files.GetMultiple("文件名称");foreach(System.Web.HttpPostedFileBasefileinfileList){file.SaveAs();}
解决方案三:
引用1楼xiaoguidangjiajia的回复:
IList<System.Web.HttpPostedFileBase>fileList=Request.Files.GetMultiple("文件名称");foreach(System.Web.HttpPostedFileBasefileinfileList){file.SaveAs();}
问题是传了三次图,fileList的count还是1
解决方案四:
引用1楼xiaoguidangjiajia的回复:
IList<System.Web.HttpPostedFileBase>fileList=Request.Files.GetMultiple("文件名称");foreach(System.Web.HttpPostedFileBasefileinfileList){file.SaveAs();}
不明白你这个传了3次是什么意思Request.Files.GetMultiple这个方法获取文件,界面代码应该有多个file控件。就类似这样<div><inputtype='file'name='flie'><inputtype='file'name='flie'><inputtype='file'name='flie'></div>
解决方案五:
调试一下看看为什么传3次
解决方案六:
input控件的name属性很有意思,你那个file名字起的也很有意思,研究下吧。
解决方案七:
javascript跟你的c#、java都不一样。当你在for循环中定义一个varreader=.....
的时候,实际上相当于你在readFile函数的第一行代码那里定义varreader;
也就说,在javascript中并不存在代码块局部定义的reader变量。因此如果你调试reader,你会发现它“乱了、冲突了、唯一了”。实际上是你不了解javascript语言,同时你也没有在这个地方认真进行断点调试。
解决方案八:
要想让代码块局部定义reader,你可以把相关代码放到另外一个函数中,这样函数中的局部变量就能相互隔离了。
解决方案九:
另外,在javascript中也不要胡乱使用“this”。当程序作用域进入一个回调子函数的时候,this往往并不是在回调函数之外(之前)的this。javascript中的this不像c#或者java那样严谨。javascript并不是一个真正的面向对象编程语言,它只是一个“动态语言”。它的this是随便可以改变的,在调用任何函数的时候都可以由调用者随便改变。于是当你注册一个回调给某个方法,而这个方法又调用了其它方法,其它方法又调用了其它方法,最后回调你的函数时,你的函数中的this可能根本不是你原来以为的this了。在javascript中要注意不要在子函数中再用this,而是应该在子函数作为参数注册给任何函数之前先定义局部变量(例如经常定义一个self、me为名的新变量),然后在子函数内使用这个新的自定义变量。不要滥用this。javascript不是一个合格的面向对象编程语言,不要用规范来看待它。