【发布时间】:2014-06-01 12:29:05
【问题描述】:
我需要允许用户将文件上传到服务器。这些是图像文件,在将它们存储到数据库之前,我需要用户提供有关他们正在上传的图像的更多信息。
到目前为止,我有一个 HTML 5 多文件上传:
<asp:FileUpload ID="fuTestUpload" AllowMultiple="true" runat="server" />
我正在显示文件名和一个下拉列表,用户可以在其中选择要上传的图像的类别:
<asp:GridView ID="gvHierarchy" AutoGenerateColumns="false" OnRowDataBound="gvHierarchy_RowDataBound" runat="server">
<Columns>
<asp:TemplateField HeaderText="Choose Files">
<ItemTemplate>
<asp:CheckBox Id="chkBox" runat="server"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Assigned Location">
<ItemTemplate>
<asp:DropDownList ID="ddl" Width="150" runat="server">
<asp:ListItem Text="-- select --" Value="0"></asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="File Path">
<ItemTemplate>
<asp:Label Id="lblFilePath" runat="server" Text='<%#Eval("FilePath")%>'/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Location Image">
<ItemTemplate>
<asp:Image Id="imgLocation" runat="server" Width="200" ImageUrl='<%#Eval("ImageData")%>'/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我在这里将图像填充回网格视图:
protected void btnUpload_Click(object sender, EventArgs e)
{
if (fuTestUpload.HasFiles)
{
DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("FilePath");
dt.Columns.Add("ImageData");
foreach (HttpPostedFile file in fuTestUpload.PostedFiles)
{
DataRow dr = dt.NewRow();
dr["FilePath"] = file.FileName.ToString();
Byte[] bImage = new Byte[file.ContentLength];
Stream myStream = file.InputStream;
myStream.Read(bImage, 0, file.ContentLength);
dr["ImageData"] = myStream;
dt.Rows.Add(dr);
}
Session["UploadedImageData"] = dt;
populateGrid(dt);
}
}
但这不起作用,它要么是空白,要么是各种字节/流错误。
知道如何实现吗?
已解决
if (fuTestUpload.HasFiles)
{
foreach (HttpPostedFile file in fuTestUpload.PostedFiles)
{
byte[] bImage = new byte[file.ContentLength];
file.InputStream.Read(bImage, 0, file.ContentLength);
success = myClass.TempStoreLocationImages(bImage, file.FileName.ToString());
}
}
感谢有关赏金奖励的建议,因为我不确定。
【问题讨论】:
-
btnUpload_Click 代码是否应该改为:
dr["ImageData"] = bImage;? -
我尝试了两个 Simon,但都没有成功 - 但是验证二进制数据是否正确存在固有的困难!
标签: c# image-processing binary