将图像存储在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答案的建议,因为我不确定。

将图像存储在DataTable中,显示在GridView中,最终存储在DB中

字节/流错误的"空白"错误有点让我认为问题更严重。上传是在Ajax容器中吗?您可以在Upload方法调用的第一行粘贴一个断点,然后点击该断点吗?如果答案是否定的,那么打开一个像Fiddler这样的Http调试器,并确认流量正确到达调试服务器。

数据表中的列类型错误。

这意味着您正在存储字节[](System.Byte[]字符串)的字符串表示。

用途:

 dt.Columns.Add("ImageData", typeof(byte[]));