使用asp.net中的FileUpload控件一次选择多个文件

时间:2014-07-03 10:03:20

标签: c# asp.net file-upload webforms

这是我的代码

protected void Page_Load(object sender, EventArgs e)
{
    tbusrcompdate.Attributes.Add("readonly", "readonly");
    if (!IsPostBack)
    {
        //using session state
        if (Session["userid"] == null)
        {
            Session["userid"] = "Compliance_Tracker";
            lblsessionID.Text = Session["userid"].ToString();
        }
        else
        {
            lblsessionID.Text = Session["userid"].ToString();
        }

        //populating ddlTaskId
        string query = "select * from Compliance_Tracker.dbo.tasklistManager where STATUS='1';";
        string columnname = "TASK ID";
        string datavaluefield = "TASK ID";
        obj7.PopulateCombo(ddlTaskID, query, columnname, datavaluefield);
        //default values in labels
        string query1 = "select top 1 [DESC] from Compliance_Tracker.dbo.tasklistManager where STATUS = '1';";
        lblDescOutput.Text = obj7.ExecuteScalar(query1).ToString();
        string query2 = "select top 1 FREQUENCY from Compliance_Tracker.dbo.tasklistManager where STATUS = '1';";
        lblFrequencyOutput.Text = obj7.ExecuteScalar(query2).ToString();

    }
}
 protected void ddlTaskID_SelectedIndexChanged(object sender, EventArgs e)
{
    string selectedtext = ddlTaskID.SelectedValue.ToString();
    string query = "select [DESC] from Compliance_Tracker.dbo.tasklistManager where Compliance_Tracker.dbo.tasklistManager.[TASK ID] ='" + selectedtext + "';";
    lblDescOutput.Text = obj7.ExecuteScalar(query).ToString();
}
protected void btnAdd_Click(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
    if (fuDocpath.HasFiles)
    {
        try
        {
            DateTime now = DateTime.Now;
            lbldateStamp.Text = now.ToString("mm_dd_yyyy_hh_mm_ss");
            string basicPath = Server.MapPath("~/Uploaded_Files/");
            string foldername = lblsessionID.Text + "_" + lbldateStamp.Text;
            string folderpath = (basicPath + foldername + "/");
            Directory.CreateDirectory(folderpath);
            foreach (HttpPostedFile file in fuDocpath.PostedFiles)
            {
                string filename = Path.GetFileName(fuDocpath.FileName);
                string folderpath1 = folderpath + "/";
                fuDocpath.SaveAs(folderpath1 + filename);
                lblName.Text =  lblName.Text+"|" + filename;
                lblerror.Text = string.Empty;
            }
        }
        catch (Exception ex)
        {
            lblerror.Text = "File couldn't be uploaded." + ex.Message;
            lblName.Text = string.Empty;
        }
    }
}

现在,使用上面的代码,即使我可以完全上传多个文件,我也只能进行单一选择。所以我需要知道,如果有一种方法可以使用fileupload工具一次选择多个文件,还是我必须使用任何其他工具? 这是我的aspx代码

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder3" Runat="Server">
<form id="Form1" runat="server" style="border-style: none; border-width: inherit; border-color: #008000; background-color:#33CC33; height:588px; width:669px; background-image: url('new.jpg'); background-repeat: no-repeat;" method="post" enctype="multipart/form-data">
    <h1 style="height: 34px">
        TRANSACTION MANAGER TABLE
    </h1>
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
     <asp:Label ID="lblsessionID" runat="server" Text=""></asp:Label>
    <asp:Label ID="lbldateStamp" runat="server" Text=""></asp:Label>
     <table id="table1" style="border-style: none; height:188px; width:549px; margin-left:30px; border-collapse: collapse; margin-top: 0px;">
        <tr>
            <td style="width: 137px; height:30px;"><asp:Label ID="lblTaskID" runat="server" Text="TASK ID" Width="70px"></asp:Label></td>
            <td style="height:30px"><asp:DropDownList ID="ddlTaskID" runat="server" Height="20px" style="margin-left: 50px" Width="126px" OnSelectedIndexChanged="ddlTaskID_SelectedIndexChanged" AutoPostBack="true" ></asp:DropDownList></td>
        </tr>
        <tr>
            <td style="width:137px; height:30px;"><asp:Label ID="lblDesc" runat="server" Text="DESC" Width="70px"></asp:Label></td>
            <td style ="height:30px"><asp:Label ID="lblDescOutput" runat="server" style="margin-left:50px" Width="126px" Height="20px"></asp:Label></td>
        </tr>
        <tr>
            <td style="width: 137px; height:30px;"><asp:Label ID="lblFrequency" runat="server" Text="FREQUENCY" Width="132px"></asp:Label></td>
            <td style="height:30px"><asp:Label ID="lblFrequencyOutput" runat="server" style="margin-left:50px" Width="126px" Height="20px"></asp:Label></td>
        </tr>
        <tr>
            <td style="width: 137px; height:30px;"><asp:Label ID="lblDocpath" runat="server" Text="DOC PATH" Width="107px"></asp:Label></td>
            <td style="height:30px">

                <asp:FileUpload ID="fuDocpath" runat="server" AllowMultiple="true" />
                <asp:Button ID="Button1" runat="server" Text ="Upload File" OnClick="Button1_Click" />
                <asp:Label ID="lblerror" runat="server" Text="" style="margin-left: 50px"></asp:Label>
    <asp:Label ID="lblName" runat="server" Text=""></asp:Label>
            </td>
        </tr>
        <tr>
            <td style="width: 137px; height:30px;"><asp:Label ID="lblusrcompdate" runat="server" Text="USER COMPLETE DATE" Width="147px"></asp:Label></td>
            <td style="height:30px"><asp:TextBox ID="tbusrcompdate" runat="server"></asp:TextBox>

                <asp:ImageButton ID ="imgbtncalender" runat="server" ImageUrl="~/home-calendar-button.jpg" Height="17px" style="margin-left: 16px" Width="16px" />
                <asp:CalendarExtender ID="CalendarExtender1" runat="server" TargetControlID="tbusrcompdate" Format="dd/MM/yyyy" PopupButtonID="imgbtncalender"></asp:CalendarExtender>
            </td>
        </tr>
    </table><br />
    <asp:Button ID="btnAdd" runat="server" Text="ADD" Height="27px" Width="80px" style="margin-left:235px" OnClick="btnAdd_Click"/>
</form>

2 个答案:

答案 0 :(得分:1)

实际问题是IE和更新后我现在能够选择多个文件。 另一个问题是我的代码实际上只有一个文件被选中,因为我没有正确获取文件名。好吧,实际上代码是在我声明文件名字符串

的部分
foreach (HttpPostedFile files in fuDocpath.PostedFiles)
            {
                string filename = Path.GetFileName(fuDocpath.FileName);
                string folderpath1 = folderpath + "/";
                fuDocpath.SaveAs(folderpath1 + filename);
                lblName.Text =  lblName.Text+"|" + filename;
                lblerror.Text = string.Empty;
            }

现在,主要问题是我没有获得正确的文件名。所以,错误是

string filename = Path.GetFileName(files.Filename)

而不是fuDocpath.filename。 愚蠢的错误fml !!!

答案 1 :(得分:0)

这不是您特定代码的答案。但它是上传多个文件的替代方案。

对于上传多个文件,我不做所有这些事情,但有一个称为asp:AjaxFileUpload控件的内容

<asp:AjaxFileUpload ID="AjaxFileUpload1" ToolTip="Uplaod File" OnUploadComplete="AjaxFileUpload1_UploadComplete" runat="server" />

代码背后:

protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
    try
    {
        string str = System.IO.Path.GetFileName(e.FileName);
        string fullpath = Path.GetFullPath(str);

        string str1 = "Your insert Query";
        con.Open();

        cmd = new SqlCommand(str1, con);

        // your command parameters to add       
        cmd.Parameters.AddWithValue("@Image_Caption", str);
        cmd.Parameters.AddWithValue("@Image_Path", "Images/" + str);
        cmd.Parameters.AddWithValue("@Image_Name", str);

        cmd.ExecuteNonQuery();
        con.Close();

        string filePath = Server.MapPath("~/Images/") + System.IO.Path.GetFileName(e.FileName);
        AjaxFileUpload1.SaveAs(filePath);
    }
    catch (Exception eep)
    {
        throw;
    }
}