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我应该持续跟进,记录下来,以后备查。
笨鸟先飞

浙公网安备 33010602011771号