使用 FileUpload 控件一次将多个图像保存到数据库

2023-12-22

我正在一家公司博客网站上工作,当用户发布帖子时,他们可以将计算机中的图像添加到帖子中。我使用 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(使用前将#替换为@)

使用 FileUpload 控件一次将多个图像保存到数据库 的相关文章

随机推荐

  • 将长时间运行的任务分配到多个帧上的最佳方法是什么?

    我有多个长时间运行的任务 例如超过 10 毫秒 这会影响浏览器的响应能力 最糟糕的事情 例如从文件加载和解析 3D 模型 已经被卸载到 Web Workers 这样它们就不会影响渲染循环 然而 有些任务不容易移植到 Workers 因此必须
  • 警告:sprintf() [function.sprintf]:第 132 行 /home/inrunitc/public_html/chek/chek.php 中的参数太少

    Warning sprintf function sprintf Too few arguments in home inrunitc public html chek chek php on line 132 Query was empt
  • 在hive中向外部表添加分区需要花费大量时间

    我想知道向外部表添加分区的最佳方法是什么 我在 hive 的 S3 上有一个外部表 分区为 车辆 日期 小时 现在 可以在一天中的任何时间添加新车辆 并且有些车辆在一天中的几个小时或几天内没有数据 几种可能的解决方案 msck修复表 需 要
  • 如何解决 Apache-Beam 中的 Beam DeprecationWarning

    第一的 生成简单数据后将数据存储在谷歌云平台bigQuery表中的代码 导入 Apache Beam 库并使用它 跑步者使用了 Google Cloud Platform Dataflow 这里是代码 from apache beam op
  • numpy.dot -> MemoryError,my_dot -> 非常慢,但有效。为什么?

    我正在尝试计算两个大小分别为 162225 10000 和 10000 100 的 numpy 数组的点积 但是 如果我调用 numpy dot A B 则会发生 MemoryError 然后 我尝试编写我的实现 def slower do
  • MySQL 间隙锁定

    我有一张桌子叫tree nodes 在那里我存储了节点的 树表示 我的主题树是在持有者的上下文中创建的 所以 有一个专栏叫做holder id 我有一个事务方法 它会从此表和其他表中进行多次读取 以确定应从树中添加 删除哪些节点 我的应用程
  • 使用 Delve 进行 vscode 调试问题

    当我在 Visual Studio Code 中调试 Go Lang 代码时 出现以下错误消息 2018 04 03 18 19 32 server go 73 Using API v1 2018 04 03 18 19 32 debugg
  • android 父 Activity 在 startActivity 上被杀死

    我有一个带有列表视图的简单应用程序 当用户点击列表项时 我开始一个新活动 Intent eventdetails new Intent HomeActivity this EventDetailsActivity class eventde
  • 基本类型的复制/赋值

    标准对基本类型的复制 赋值有何规定 对于类类型 我们有复制构造函数 赋值运算符 它们将右侧作为引用 它必须是引用 否则我们会无限递归 struct Foo Foo const Foo 这是如何定义基本类型的 看这个例子 const Foo
  • 在C++中创建模板时是否可以找到sizeof(T)?

    我正在尝试构建一个模板 让我可以使用可调整大小的数组 有没有办法找到sizeof T 我使用 malloc 而不是 new 因为我想在调整数组大小的函数中使用 realloc 这是我的类的构造函数出现错误 template
  • getElementsbyClassName 未显示[重复]

    这个问题在这里已经有答案了 我正在使用以下代码 当我现在点击按钮时
  • 使用 MVC 模型显示只读文本

    我有一个 MVC 模型 其属性定义为 DisplayName Service Version public string ServiceVersion get set 在屏幕上 我希望它显示为 服务版本 0 1 ServiceVersion
  • 删除变量的特定部分

    我想从 CMake 变量中删除特定库 Suppose LIB包含变量 A B C 的值 我知道用set像这样添加另一个变量 D 的内容 set LIB LIB D 但是我试图从中删除 C LIB喜欢关注 unset LIB C 这段代码不起
  • 如何捕获触摸板输入

    我到处寻找如何捕获笔记本电脑的触摸板输入 但我似乎找不到任何适用于 Chrome 扩展 JavaScript 的内容 问题 对于笔记本电脑上的触摸板 如何捕获向下的手指数量 不是单击 只是向下并可能像使用鼠标一样移动 相应的 x y 坐标以
  • 如何在 Python 中创建二维数组

    我试图在 Python 中创建一个索引的二维数组 但我总是以某种方式遇到错误 下面的代码 Declare Constants no real constants in Python PLAYER 0 ENEMY 1 X 0 Y 1 AMMO
  • Chrome扩展程序中使用axios和webpack时出现TypeError:adapter is not a function错误

    我正在构建一个 chrome 扩展 当从内容脚本收到某些消息时 该扩展需要进行 API 调用 我在发出 HTTP 请求时遇到困难 我相信我的 webpack 配置是罪魁祸首 我尝试过使用node fetch and axios两者都不适合我
  • 我应该使用哪个 jsf-impl?

    在哪里可以找到适用于我的 jsf 2 webapp 的 jsf impl 在 Maven 的仓库中我得到了 1 2 版本 In the http download java net maven 2 javax faces http down
  • 在全球范围内使用 reCAPTCHA

    我正在尝试按照以下网址中的说明在全球范围内使用 reCAPTCHAhttps developers google com recaptcha docs faq can i use recaptcha globally https devel
  • Log4Net RollingFileAppender 生成重复日志

    我有一个在单个服务器上运行的 WCF 服务 使用 Log4net 通过 INFO 和 WARN 级别日志条目跟踪使用情况 使用具有以下非常标准配置的 RollingFileAppender
  • 使用 FileUpload 控件一次将多个图像保存到数据库

    我正在一家公司博客网站上工作 当用户发布帖子时 他们可以将计算机中的图像添加到帖子中 我使用 FileUpload 控件来执行此操作 效果很好 但是 我正在尝试更改功能以允许用户在一篇文章中选择和上传多个图像 但我遇到了一些问题 我已将 允