将图像存储在DataTable中,显示在GridView中,最终存储在DB中
本文关键字:存储 DB GridView 显示 图像 DataTable | 更新日期: 2023-09-27 17:58:48
我需要允许用户将文件上传到服务器。这些都是图像文件,在将它们存储在数据库中之前,我需要用户提供关于他们正在上传的图像的附加信息。
到目前为止,我有一个HTML5多文件上传:
<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());
}
}
感谢关于赏金奖励v答案的建议,因为我不确定。
字节/流错误的"空白"错误有点让我认为问题更严重。上传是在Ajax容器中吗?您可以在Upload方法调用的第一行粘贴一个断点,然后点击该断点吗?如果答案是否定的,那么打开一个像Fiddler这样的Http调试器,并确认流量正确到达调试服务器。
数据表中的列类型错误。
这意味着您正在存储字节[](System.Byte[]
字符串)的字符串表示。
用途:
dt.Columns.Add("ImageData", typeof(byte[]));