使用C#使用多文件上载控件

时间:2014-09-15 20:13:05

标签: c# asp.net file-upload

我在一个网页上有两个FileUpload。 问题是当我在特定文件夹上使用FileUpload3上传文件时,它也会在该文件夹上传FileUpload2文件。 我希望当我点击提交按钮FileUpload3上传文件只在FileUpload3而不是FileUpload2的specfic文件夹上时。 我正在使用ASP.Net和C#。

我的ASPX代码:

<asp:FileUpload ID="FileUpload2" runat="server" /></br>
<asp:FileUpload ID="FileUpload3" runat="server" AllowMultiple="true" />

和我的C#代码:

if (FileUpload2.HasFile)
            {
                string time1 = INDIAN_ZONE.ToString("MM-dd-yyyy_hhmmss");
                string directoryPath = Server.MapPath(string.Format("./Upload_Files/Day_Description/Destination_Image/" + DropDownList8.SelectedItem.Text + "/" + Label23.Text));
                if (!Directory.Exists(directoryPath))
                {
                    Directory.CreateDirectory(directoryPath);
                }
                else
                {
                }

                string fileName = Path.GetFileName(FileUpload2.PostedFile.FileName);
                fileName = time1 + fileName;
                string path = "./Upload_Files/Day_Description/Destination_Image/" + DropDownList8.SelectedItem.Text + "/" + Label23.Text + "/";
                FileUpload2.PostedFile.SaveAs(Server.MapPath(path) + fileName);
            }
            else
            {
                string time1 = INDIAN_ZONE.ToString("MM-dd-yyyy_hhmmss");
                string directoryPath = Server.MapPath(string.Format("./Upload_files/Day_Description/" + DropDownList8.SelectedItem.Text + "/" + Label23.Text));
                if (!Directory.Exists(directoryPath))
                {
                    Directory.CreateDirectory(directoryPath);
                }
                else
                {
                }
            }

            if (FileUpload3.HasFile)
            {
                HttpFileCollection hfc = Request.Files;
                for (int i = 0; i < hfc.Count; i++)
                {
                    HttpPostedFile hpf = hfc[i];
                    if (hpf.ContentLength > 0)
                    {
                        string FileExtention = System.IO.Path.GetExtension(FileUpload3.FileName);
                        string time1 = INDIAN_ZONE.ToString("MM-dd-yyyy_hhmmss");
                        string directoryPath = Server.MapPath(string.Format("./Upload_Files/Day_Description/Hotel_Image/" + DropDownList8.SelectedItem.Text + "/" + Label23.Text));
                        if (!Directory.Exists(directoryPath))
                        {
                            Directory.CreateDirectory(directoryPath);
                        }
                        else
                        {
                        }

                        string fileName = Path.GetFileName(hpf.FileName);
                        fileName = time1 + fileName;
                        string path = "./Upload_Files/Day_Description/Hotel_Image/" + DropDownList8.SelectedItem.Text + "/" + Label23.Text + "/";
                        hpf.SaveAs(Server.MapPath(path) + fileName);
                    }
                }
            }
            else
            {
                string time1 = INDIAN_ZONE.ToString("MM-dd-yyyy_hhmmss");
                string directoryPath = Server.MapPath(string.Format("./Upload_Files/Day_Description/Hotel_Image/" + DropDownList8.SelectedItem.Text));
                if (!Directory.Exists(directoryPath))
                {
                    Directory.CreateDirectory(directoryPath);
                }
                else
                {
                }
            }

问题是当我在特定文件夹上使用FileUpload3上传文件时,它也会在该文件夹上传FileUpload2文件。 我希望当我点击提交按钮FileUpload3上传文件只在FileUpload3而不是FileUpload2的specfic文件夹上时。 我正在使用ASP.Net和C#。

2 个答案:

答案 0 :(得分:1)

这是因为文件上传控件都在同一表单上生成文件输入控件,当您提交页面时(无论哪个按钮触发提交),表单上的所有内容都会被发布(包括所有文件上传控件) )。

解决方案是使用两个单独的表单,或使用javascript清除文件上传控件的文件输入,以便在提交页面之前不要提交。

不幸的是,这是ASP.NET网络表单模型的一个短缺,你不能在同一页面上有多个表单(启用runat="server")这意味着你不能够在其他表单上使用ASP.NET控件。实际上,如果您希望继续使用ASP.NET文件上传控件,那么java脚本解决方案是唯一的方法。

修改

另一种选择是重新整理表单的用户界面,并要求用户在向他们展示上传控件之前选择他们想要使用的上传类型。

答案 1 :(得分:0)

我得到了这个问题的解决方案。 我使用

清空FileUpload2的文件
FileUpload2.PostedFile.InputStream.Dispose();

使用FileUpload3上传文件之前。