我正在博客网站上工作。当前功能允许用户上传照片(使用fileUpload控件)作为其帖子的一部分(每个帖子都附有唯一的帖子ID)。但是,用户每个帖子只能上传一张照片。我试图让它们上传多个图像,并在gridview中的一个帖子中看到所有图像。用户将按CTRL +点击他们想要上传的图像"浏览'在fileUpload控件上。在这种情况下,我使用下面的代码成功地将每个选定的图像插入到一个帖子ID下的数据库中。
if (imageUpload.HasFiles)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
HttpPostedFile file;
SqlCommand maxMessId = new SqlCommand("SELECT Max(MessageID) FROM BlogMessages", conn);
lastMessageID = Convert.ToInt32(maxMessId.ExecuteScalar());
foreach (var uploadedFile in imageUpload.PostedFiles)
{
file = uploadedFile;
MemoryStream ms = new MemoryStream();
file.InputStream.CopyTo(ms);
byte[] byts = ms.ToArray();
ms.Dispose();
SqlCommand cmdInsertImage = new SqlCommand("INSERT INTO BlogImages(Image, MessageID) VALUES (@Image, @MessageID)", conn);
cmdInsertImage.Parameters.AddWithValue("@Image", SqlDbType.Image).Value = byts;
cmdInsertImage.Parameters.AddWithValue("@MessageID", lastMessageID);
cmdInsertImage.ExecuteNonQuery();
byts = null;
cmdInsertImage = null;
}
}
所以我要做的第一件事就是工作,但我遇到的问题是,一旦发布了' Post'单击按钮。目前,它只显示其中一个图像,即fileUpload中所选图像列表中的第一个图像。我当前的代码作为imageHandler类的一部分:
try
{
int messageid = Convert.ToInt32(context.Request.QueryString["mid"]);
//SqlCommand command = new SqlCommand("SELECT Image from BlogMessages WHERE Image IS NOT NULL AND MessageID=" + messageid, conn);
SqlDataAdapter sda = new SqlDataAdapter("SELECT Image from BlogImages WHERE Image IS NOT NULL AND MessageID=" + messageid, conn);
DataTable data = new DataTable();
sda.Fill(data);
if (data != null)
{
for (int i=0; i < data.Rows.Count; i++)
{
Byte[] bytes = (Byte[])data.Rows[i]["Image"];
context.Response.Buffer = true;
context.Response.Charset = "";
//context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
//context.Response.AddHeader("content-disposition", "attachment;filename="
//+ data.Rows[0]["Name"].ToString());
context.Response.BinaryWrite(bytes);
}
context.Response.Flush();
context.Response.End();
}
}
有关如何显示插入数据库的所有图像的任何建议吗?谢谢!
Gridview定义:
<asp:GridView ID="gvPosts" runat="server" AutoGenerateColumns="False" DataKeyNames="MessageID" GridLines="Vertical" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" Width="693px"
OnPageIndexChanging="gvPosts_PageIndexChanging" OnRowEditing="gvPosts_RowEditing"
OnRowCancelingEdit="gvPosts_RowCancelingEdit" OnRowUpdating="gvPosts_RowUpdating" AllowPaging="True">
<AlternatingRowStyle BackColor="#CCCCCC" />
<Columns>
<asp:TemplateField HeaderText="Posts" HeaderStyle-Font-Size="Larger">
<EditItemTemplate>
<asp:TextBox ID="tbGridTitle" runat="server" Text='<%# Bind("Title") %>' Font-Bold="true" Font-Size="Large" ForeColor="#cc0000"></asp:TextBox>
<div style="margin-left: 20px">
<p>
<asp:TextBox ID="tbGridAuthor" runat="server" Text='<%# Bind("Author") %>' Font-Bold="true" Font-Size="Small" Width="150px"></asp:TextBox>
<asp:Label ID="lblDate" runat="server" Text='<%# Bind("Date","{0:MM/dd/yyyy}") %>' Font-Bold="true" Font-Size="Small" Width="100px"></asp:Label>
<asp:Label ID="lblEditIPAddress" runat="server" Text='<%# Bind("IPAddress") %>' Font-Bold="true" Font-Size="Small" Width="100px"></asp:Label>
<%--<asp:Label ID="lblMID" runat="server" Text='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>'></asp:Label>--%>
</p>
</div>
<div style="margin-left: 40px">
<asp:TextBox ID="tbGridMessage" runat="server" Text='<%# Bind("Message") %>' TextMode="MultiLine" Width="450px" Height="200px"></asp:TextBox>
<div>
<asp:Image ID="postImage" runat="server" ImageUrl='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>' Width="400px" AlternateText="No Image" ImageAlign="Middle" />
<asp:Image ID="Image1" runat="server" ImageUrl='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>' Width="400px" AlternateText="No Image" ImageAlign="Middle" />
</div>
</div>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("Title") %>' Font-Bold="true" Font-Size="Large" ForeColor="#cc0000"></asp:Label>
<div style="margin-left: 20px">
<p>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Author") %>' Font-Bold="true" Font-Size="Small" Width="150px"></asp:Label>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Date","{0:MM/dd/yyyy}") %>' Font-Bold="true" Font-Size="Small" Width="100px"></asp:Label>
<asp:Label ID="lblGridIPAddress" runat="server" Text='<%# Bind("IPAddress") %>' Font-Bold="true" Font-Size="Small" Width="100px" Visible="false"></asp:Label>
<%--<asp:Label ID="lblMID" runat="server" Text='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>'></asp:Label>--%>
</p>
</div>
<div style="margin-left: 40px">
<asp:Label ID="Label3" runat="server" Text='<%# Bind("Message") %>'></asp:Label>
<div>
<%--<asp:Image ID="postImage" runat="server" ImageUrl='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>' Width="400px" AlternateText="No Image" ImageAlign="Middle" Visible="false" />--%>
<asp:Image ID="postImage" runat="server" ImageUrl='<%# "ImageHandler.ashx?mid="+ Eval("MessageID")%>' Width="400px" AlternateText="No Image" ImageAlign="Middle" Visible="false" />
</div>
</div>
</ItemTemplate>
<HeaderStyle Font-Size="Large" />
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" Text="View Comments" OnClick="lbViewComments_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="MessageID" SortExpression="MessageID" Visible="false">
<ItemTemplate>
<asp:Label ID="lblMessageID" runat="server" Text='<%# Bind("MessageID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False" Visible="False">
<EditItemTemplate>
<asp:LinkButton ID="lbUpdate" runat="server" CausesValidation="True" CommandName="Update" Text="Update"></asp:LinkButton>
<asp:LinkButton ID="lbCancel" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel"></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="lbEdit" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False" Visible="False">
<ItemTemplate>
<asp:LinkButton ID="lbDelete" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" OnClick="lbDelete_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#CCCCCC" />
<HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#808080" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#383838" />
</asp:GridView>