我正在一家公司博客网站上工作,当用户发布帖子时,他们可以将计算机中的图像添加到帖子中。我使用 FileUpload 控件来执行此操作,效果很好。但是,我正在尝试更改功能以允许用户在一篇文章中选择和上传多个图像,但我遇到了一些问题。我已将“允许多个”属性设置为“true”,但是一旦在控件中选择了多个图像(图像 URL 用逗号分隔)并单击了发布按钮,则只有其中一张图像被插入到数据库中,但它会插入与图像一样多的次数,并且博客文章上只显示一张图像。因此,如果我尝试添加三个不同的图像,它会将第一个图像的三个实例插入数据库中。我的onClick函数中与FileUpload对应的代码如下:
if (imageUpload.HasFile == true)
{
SqlCommand maxMessId = new SqlCommand("SELECT Max(MessageID) FROM BlogMessages", conn);
lastMessageID = Convert.ToInt32(maxMessId.ExecuteScalar());
foreach (var uploadedFile in imageUpload.PostedFiles)
{
SqlCommand cmdInsertImage = new SqlCommand("INSERT INTO BlogImages(Image, MessageID) VALUES (@Image, @MessageID)", conn);
cmdInsertImage.Parameters.AddWithValue("@Image", SqlDbType.Image).Value = imageUpload.FileBytes;
cmdInsertImage.Parameters.AddWithValue("@MessageID", lastMessageID);
cmdInsertImage.ExecuteNonQuery();
}
}
我认为问题可能在于:
cmdInsertImage.Parameters.AddWithValue("@Image", SqlDbType.Image).Value = imageUpload.FileBytes;
如果这只是获取一张图像的文件字节..我不知道如何获取两个文件的文件字节。我的 BlogImages 表中的图像列属于图像类型。
非常感谢任何建议!
您确定您正在以正确的方式工作吗???PostesFiles 是文件列表,每个文件都有自己的属性,您需要从那里读取......没有其他内容
这是一个简单的例子
For Each xx In fp.PostedFiles
xx.InputStream
xx.ContentLength
xx.FileName
Next
这些属性在公开 Inputstrem 图像流时,ContenteLenght 是图像的长度,Filename 是图像的文件名。因此,当您传递图像上传时。FileBytes 不是实现目标的正确方法。您必须读取流并返回bytearray 来保存你的 sql 服务器中的数据。我希望它能帮助你解决你的问题。
UPDATE*
假设您进入每个文件的 foreach 循环,您必须设置自己的字节数组
MemoryStream ms = new MemoryStream();
file.PostedFile.InputStream.CopyTo(ms);
var byts = ms.ToArray();
ms.Dispose();
then
像这样改变你的插入语句
cmdInsertImage.Parameters.AddWithValue("@Image", SqlDbType.Image).Value = byts;
未经测试,但应该可以解决问题。
UPDATE 2
if (test.HasFiles) {
StringBuilder sb = new StringBuilder();
foreach (void el_loopVariable in test.PostedFiles) {
el = el_loopVariable;
sb.AppendLine("FILENAME:<B>" + el.FileName.ToString + "</B><BR/>");
MemoryStream ms = new MemoryStream();
el.InputStream.CopyTo(ms);
byte[] byts = ms.ToArray;
ms.Dispose();
sb.AppendLine(string.Join(";", byts));
sb.AppendLine("<br/<br/>");
byts = null;
}
LitResponse.Text = sb.ToString;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)