我需要允许用户将文件上传到服务器。这些是图像文件,在它们存储在数据库之前,我需要用户提供有关他们上传的图像的其他信息。
到目前为止,我有一个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());
}
}
赞赏有关赏金奖励的答案,因为我不确定。
答案 0 :(得分:0)
&#34;空白&#34;字节/流错误的错误使我认为问题是进一步上升的链。上传是否在Ajax容器中?你可以在Upload方法调用的第一行粘贴一个断点,并点击该断点吗?如果答案是否定的,请打开像Fiddler这样的Http调试器,并确认流量是否正确地进入调试服务器。
答案 1 :(得分:0)
数据表中的列类型错误。
这意味着您正在存储byte []的字符串表示形式(System.Byte[]
字符串)。
使用:
dt.Columns.Add("ImageData", typeof(byte[]));