ASP.NET中FileUpload的一个问题

目前项目比较赶时间,在一个项目中发现的问题,在Repeater中绑定生成多个FileUpload时,出现上传文件只能上传部分。

具体代码如下:

<div>
        <table style="width: 100%">
            <tr>
                <th>序号</th>
                <th>图片</th>
                <th>控件</th>
            </tr>
            <asp:Repeater runat="server" ID="rptTest">
                <ItemTemplate>
                    <tr>
                        <td><%#Eval("Id") %>
                            <asp:HiddenField runat="server" ID="hidId" />
                        </td>
                        <td>
                            <img src="<%#Eval("Src") %>" />
                        </td>
                        <td>
                            <asp:FileUpload runat="server" ID="flImg" /></td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>
        </table>
        <asp:Button runat="server" ID="btnSave" Text="保存" OnClick="btnSave_Click" />
    </div>

  后端C#代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.IO;

namespace Cms.Portal
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Bind();
            }
        }

        public DataTable GetTable()
        {
            DataTable table = new DataTable();
            table.Columns.Add("Id");
            table.Columns.Add("Name");
            table.Columns.Add("Src");

            for (int i = 0; i < 10; i++)
            {
                var row = table.NewRow();
                row["ID"] = i.ToString();
                row["Name"] = "名称+" + i.ToString();

                table.Rows.Add(row);
            }

            return table;
        }

        private void Bind()
        {
            rptTest.DataSource = GetTable();
            rptTest.DataBind();
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            string filename = Server.MapPath("~/Resources/Upload");
            if (!Directory.Exists(filename))
            {
                Directory.CreateDirectory(filename);
            }

            HttpFileCollection uploadFiles = Request.Files;

            for (int i = 0; i < uploadFiles.Count; i++)
            {
                HttpPostedFile postedFile = uploadFiles[i];
                try
                {
                    if (postedFile.ContentLength > 0)
                    {
                        string fileName = postedFile.FileName;// DateTime.Now.ToString("yyyyMMddHHmmssffff");
                        string fileExt = Path.GetExtension(postedFile.FileName);
                        string path = Path.Combine(filename, fileName + fileExt);
                        sb.AppendFormat("{0},写入文件开始:{1}", DateTime.Now, path);
                        sb.AppendLine();
                        postedFile.SaveAs(path);
                        sb.AppendFormat("{0},写入文件结束:{1}", DateTime.Now, path);
                        sb.AppendLine();

                        //Label1.Text += "文件 #" + (i + 1) + ":" + System.IO.Path.GetFileName(postedFile.FileName) + "〈br/>";
                        //postedFile.SaveAs(filepath + System.IO.Path.GetFileName(postedFile.FileName));
                    }
                }
                catch (Exception Ex)
                {
                    Write(Ex.Message);
                    //Label1.Text += "发生错误: " + Ex.Message;
                }                
            }

            //for (int i = 0; i < rptTest.Items.Count; i++)
            //{   
            //    FileUpload flImg = (FileUpload)rptTest.Items[i].FindControl("flImg");
            //    string filename = Server.MapPath("~/Resources/Upload");
            //    if (!Directory.Exists(filename))
            //    {
            //        Directory.CreateDirectory(filename);
            //    }
            //    if (flImg.FileContent.Length != 1)
            //    {
            //        string fileName = DateTime.Now.ToString("yyyyMMddHHmmssffff");
            //        string fileExt = Path.GetExtension(flImg.FileName);
            //        string path = Path.Combine(filename, fileName + fileExt);
            //        sb.AppendFormat("{0},写入文件开始:{1}", DateTime.Now, path);
            //        sb.AppendLine();
            //        flImg.SaveAs(path);
            //        sb.AppendFormat("{0},写入文件结束:{1}", DateTime.Now, path);
            //        sb.AppendLine();
            //    }
            //}
            Write(sb.ToString());
        }

        void Write(string msg)
        {
            using (StreamWriter writer = new StreamWriter("c:\\upload.txt"))
            {
                writer.Write(msg);
                writer.Flush();
                writer.Close();
            }
        }
    }
}

 在测试中发现,网络较好时,上传文件没有问题,开启下载之后,即网络不太好时,上传文件总是或是最后一个,或是无端少一个文件。

该BUG我应该持续跟进,记录下来,以后备查。

posted @ 2015-12-07 20:50  124882511  阅读(218)  评论(0)    收藏  举报