代码改变世界

ASP.NET中采用HTML控件File进行多文件上传

2012-12-06 15:50  sql_manage  阅读(467)  评论(0编辑  收藏  举报

在asp.net中当服务器控件用习惯了,反而会忘记web中最为平常的get与post表单的用法。

这一次在项目中碰到个问题,用户要动态的添加fileupload控件实现多文件上传,这个需求

如果用服务器端控件fileupload就不好实现了。

于是花了一个小时温习了一下,正常的web表单提交,并将体会记录了下来。当然,高手可

以直接忽略。呵呵

1、三个获取页面POST与GET的方法。

     <input type="text" name="name" value="test" />

     Request.Form["name"]   POST接收方式

     Request.QueryString["name"]   GET接收方式

     Request["name"]  POST与GET都可以

     这里要注意一下,如果页面是checkbox组的话,它会接收到勾选了的checkbox,其中value以逗号分隔。

2、文件上传

     这里是我做的多文件上传的一个实例,因为用HTML控件的文件上传比较特殊一点。

     首先引入JQUERY

<script type="text/javascript">
        function addFileControl() {
            var fileControlString = '<input name="File1" type="file" /><br />';
            $("#fileArea").append(fileControlString);
        }
    </script>

页面代码:(注意这里的form没有runat="server",其中enctype="multipart/form-data"是必需的

<form id="formFileUpload" method="post" action="MiniFileUpload.aspx?type=upload" enctype="multipart/form-data">
    <div id="fileArea">
        <input name="File1" type="file" /><br />
    </div>
    <input type="button" value="添加" id="btnAddUpload" onclick="addFileControl();" />
    <input type="submit" value="上传" />
    </form>

后台.cs代码如下:(这里是遍历页面所有的file上传控件,如果页面上只有一个上传控件的话,其实可以用

HttpPostedFile f = Request.Files["name"];

)的方式获取的。

private void fileUploadEvent()
        {
            HttpFileCollection fileCollection = Request.Files;
            int filesCount = fileCollection.Count;
            for (int i = 0; i < filesCount; i++)
            {
                HttpPostedFile file = fileCollection[i];
                if (!string.IsNullOrEmpty(file.FileName))
                {
                    if (file.FileName.LastIndexOf("\\") != -1)
                    {
                        string fileName = file.FileName.Substring(file.FileName.LastIndexOf("\\") + 1);//这里的file.FileName其实是上传文件客户端全路径
                        if (fileName.LastIndexOf(".") != -1)
                        {
                            string fileNameExtend = fileName.Substring(fileName.LastIndexOf("."));
                            if (fileNameExtend == ".txt")
                            {
                                string savePath = AppDomain.CurrentDomain.BaseDirectory + "filesUpload\\" + fileName;
                                file.SaveAs(savePath);
                            }
                        }
                        Response.Write(fileName + "<br/>");
                    }
                }
            }
        }