如果要实现整个文件夹的上传, 有两种方式:
使用支持文件夹上传的插件.
.NET你可以用servlet或者Flesh. 其中 chrome浏览器支持使用javascript上传文件夹文件
手动将文件夹中的所有文件,利用<input type="file" />控件添加到页面, 一次性提交上传. 其中支持html5的浏览器大部分可使用 <input type="file" multiple="multiple" />一次选择多文件上传(IE9除外)
1、前端界面十分简单,只是放一个file类型的和一个按钮,并且为这个按钮添加点击事件(btnUpLoad_Click),如下图:
<input id="UpLoad" runat="server" type="file"></asp:button>
2、后台编写上传按钮点击事件UpLoad_Click里的代码,先大体说一下思路:
根据file类型的控件获得将要上传文件在本机的物理路径;
在这个物理路径中用截取字符串的方法获得文件名(第一步中取得的路径为本机的绝对路径,在服务器上是无效的,所以这里只需要获取文件名);
利用file类型的控件属性PostedFile的SaveAs()方法将相应文件存储到服务器中指定的文件夹中。
3、后台核心代码:
protected void btnUpLoad_Click(object sender, EventArgs e){
//取出所选文件的本地路径
string fullFileName = this.UpLoad.PostedFile.FileName
//从路径中截取出文件名
string fileName = fullFileName.Substring(fullFileName.LastIndexOf(\) + 1)
//限定上传文件的格式
string type = fullFileName.Substring(fullFileName.LastIndexOf(.) + 1)
if (type == doc || type == docx || type == xls || type == xlsx || type == ppt || type == pptx || type == pdf || type == jpg || type == bmp || type == gif || type == png || type == txt || type == zip || type == rar)
{
//将文件保存在服务器中根目录下的files文件夹中
string saveFileName = Server.MapPath(/files) + \ + fileName
UpLoad.PostedFile.SaveAs(saveFileName)
Page.ClientScript.RegisterStartupScript(Page.GetType(), message, <script language='javascript' defer>alert('文件上传成功!')</script>)
//向数据库中存储相应通知的附件的目录
BLL.news.InsertAnnexBLL insertAnnex = new BLL.news.InsertAnnexBLL()
AnnexEntity annex=new AnnexEntity() //创建附件的实体
annex.AnnexName=fileName //附件名
annex.AnnexContent=saveFileName //附件的存储路径
annex.NoticeId = noticeId //附件所属“通知”的ID在这里为已知
insertAnnex.InsertAnnex(annex) //将实体存入数据库(其实就是讲实体的这些属性insert到数据库中的过程,具体BLL层和DAL层的代码这里不再多说)
}
else
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), message, <script language='javascript' defer>alert('请选择正确的格式')</script>)
}
}
你的$('#Image').val()获取的是你本地上传的路径,这是一个字符串类似这样的“c:/1.jpg”一般使用js判断文件是否存在(val=='')和文件类型(val.split('.')[1]=='jpg'),
判断大小的话虽然可以用ActiveXObject,但这个只能兼容IE,而其他的需要借助其他的东西才能做到
建议你使用js判断文件是否存在和文件格式,然后使用ajax调用后台方法去判断文件大小和保存文件