如何从SQL Server表中下载并查看图像?

2023-12-08

我有个问题。我想从 SQL Server 表下载并在浏览器中查看图像。我不知道该怎么办。

My code:

public partial class IndexForm : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGrid();
        }
    }

    private void BindGrid()
    {
        string CurrentUser = User.Identity.Name;
        string constr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

        using (SqlConnection con = new SqlConnection(constr))
        {
            if (CurrentUser == null || CurrentUser == "" || CurrentUser == " ")
            {
                //Zaprzeczenie w if'ie nie działa...
            }
            else if (CurrentUser != null || CurrentUser != "" || CurrentUser != " ")
            { 
                using (SqlCommand cmd = new SqlCommand())
                {
                    GridView GridView1 = LoginView3.FindControl("GridView1") as GridView;
                    cmd.CommandText = "select Id, Name from tblFiles WHERE email = @CurrentUser";
                    cmd.Parameters.Add("@CurrentUser", SqlDbType.NVarChar);
                    cmd.Parameters["@CurrentUser"].Value = User.Identity.Name;
                    cmd.Connection = con;

                    con.Open();

                    GridView1.DataSource = cmd.ExecuteReader();
                    GridView1.DataBind();

                    con.Close();
                }
            }
        }
    }

    protected void DownloadFile(object sender, EventArgs e)
    {
        int id = int.Parse((sender as LinkButton).CommandArgument);
        byte[] bytes;
        string fileName, contentType;

        string constr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "select Name, Data, ContentType from tblFiles where Id=@Id";
                cmd.Parameters.AddWithValue("@Id", id);
                cmd.Connection = con;

                con.Open();

                using (SqlDataReader sdr = cmd.ExecuteReader())
                {
                    sdr.Read();
                    bytes = (byte[])sdr["Data"];
                    contentType = sdr["ContentType"].ToString();
                    fileName = sdr["Name"].ToString();
                }

                con.Close();
            }
        }

        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = contentType;
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
        Response.BinaryWrite(bytes);
        Response.Flush();
        Response.End();
    }

    protected void Upload(object sender, EventArgs e)
    {
        FileUpload FileUpload1 = LoginView3.FindControl("FileUpload1") as FileUpload;
        string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
        string contentType = FileUpload1.PostedFile.ContentType;
        string email = User.Identity.Name;

        using (Stream fs = FileUpload1.PostedFile.InputStream)
        {
            using (BinaryReader br = new BinaryReader(fs))
            {
                byte[] bytes = br.ReadBytes((Int32)fs.Length);
                string constr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

                using (SqlConnection con = new SqlConnection(constr))
                {
                    string query = "insert into tblFiles values (@Name, @ContentType, @Data, @email)";
                    using (SqlCommand cmd = new SqlCommand(query))
                    {
                        cmd.Connection = con;
                        cmd.Parameters.AddWithValue("@Name", filename);
                        cmd.Parameters.AddWithValue("@ContentType", contentType);
                        cmd.Parameters.AddWithValue("@Data", bytes);
                        cmd.Parameters.AddWithValue("@email", email);

                        con.Open();
                        cmd.ExecuteNonQuery();
                        con.Close();
                    }
                }
            }
        }

        Response.Redirect(Request.Url.AbsoluteUri);
    }
}

这是我在 SQL Server 数据库中的表:

CREATE TABLE [dbo].[tblFiles] 
(
    [id]          INT             IDENTITY (1, 1) NOT NULL,
    [Name]        VARCHAR (50)    NOT NULL,
    [ContentType] NVARCHAR (200)  NOT NULL,
    [Data]        VARBINARY (MAX) NOT NULL,
    [email]       VARCHAR (50)    NOT NULL
);

如何从SQL Server表中下载并查看图像?

此代码不起作用:

foreach (string strfile in Directory.GetFiles(Server.MapPath("~/Files")))

and

public FileContentResult GetFile(int id)
    {
        SqlDataReader rdr;
        byte[] fileContent = null;
        string mimeType = "";
        string fileName = "";

        const string connect = @"Server=your_servername;Database=your_database;User 
        Id=user_id;password=user_password;";

        using (var conn = new SqlConnection(connect))
        {
            var qry = "SELECT FileContent, MimeType, FileName FROM FileStore WHERE ID 
            = @ID";
            var cmd = new SqlCommand(qry, conn);
            cmd.Parameters.AddWithValue("@ID", id);

            conn.Open();
            rdr = cmd.ExecuteReader();

            if (rdr.HasRows)
            {
                rdr.Read();

                fileContent = (byte[])rdr["FileContent"];
                mimeType = rdr["MimeType"].ToString();
                fileName = rdr["FileName"].ToString();
            }
        }

        return File(fileContent, mimeType, fileName);
    }

你将不得不使用一个HttpHandler为了转换回你的字节数组。

    public class ImageHandler : IHttpHandler
    {
      public void ProcessRequest(HttpContext context)
      {
         int id = context.Request.QueryString.Get("ID");
         SqlDataReader rdr;
         byte[] fileContent = null;
         const string connect = @"Server=your_servername;Database=your_database;User 
         Id=user_id;password=user_password;";

         using (var conn = new SqlConnection(connect))
         {
            var qry = "SELECT FileContent, MimeType, FileName FROM FileStore WHERE ID = @ID";
            var cmd = new SqlCommand(qry, conn);
            cmd.Parameters.AddWithValue("@ID", id);
            conn.Open();
            rdr = cmd.ExecuteReader();

            if (rdr.HasRows)
            {
              rdr.Read();
              context.Response.Clear();
              context.Response.ContentType = rdr["MimeType"].ToString();
              context.Response.BinaryWrite((byte[])rdr["FileContent"]);
              context.Response.End();
            }
         }
      }

      public bool IsReusable
      {
        get
        {
          return true;
        }
      }
    }

创建图像处理程序后,将其注册到 web.config 文件中。

<configuration>
  . . .
  <system.webServer>
    . . .
    <handlers>
      <add name="ImageHandler" verb="*" path="*.ashx" type="Assembly.ImageHandler,Assembly" />
      . . .
    </handlers>
  </system.webServer>
  . . .
</configuration>

然后添加要忽略的路由以处理该文件

routes.IgnoreRoute("{handler}.ashx");

最后,您将能够通过从 html 调用它来显示图像

<img src="~/ImageHandler.ashx?ID=@YourItemId"/>

Regards.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从SQL Server表中下载并查看图像? 的相关文章

  • 在 C# 中解析 JS Date.toIsoString

    我需要将 JS 日期存储为 ISO 8601 日期 我目前正在从格式为 2019 06 22T00 00 00 000Z 的表单中获取日期 正如 JS 的 toIsoString 方法所期望的那样 当这个日期传递到我的 API 控制器时 我
  • 从关键字后的文本中提取字符串

    我想从 SQL 字段中关键字后面的文本中提取内容 我有一个名为Description在表中 该字段的内容是 asdasf 关键字 狗 aeee 关键字 猫 ffffaa 关键词 狼 我想提取并保存 关键字 之后的文本 在本例中dog cat
  • 如何在 C 中链接目标文件?失败并显示“架构 x86_64 的未定义符号”

    因此 我尝试在我的文件 file2 c 中使用另一个 C file1 c 文件中定义的函数 为了做到这一点 我包含了 file1 file1 h 的标头 但是 每当我尝试使用 gcc 编译文件时 我都会收到以下错误 Undefined sy
  • ASP.NET - Crystal Report Viewer 打印按钮在 ASP.NET 中不起作用

    我正在使用 Visual Studio 2008 但我遇到了水晶报告问题 当我单击打印按钮时 它会将我带到弹出窗口 但未找到页面 弹出的网址是 http localhost aspnet client System Web 2 0 5072
  • 更改私有模块片段是否会导致模块重新编译?

    On 此页面有关 C 20 模块功能 https www modernescpp com index php c 20 modules private module fragment and header units 我发现了这样的说法 借
  • MySQL - 如何将列逆透视到行?

    ID a b c 1 a1 b1 c1 2 a2 b2 c2 如何将行重新组织为ID columntitle value 1 a1 a 1 b1 b 1 c1 c 2 a2 a 2 b2 b 2 c2 c 你正在尝试unpivot数据 My
  • 为什么连续抛出 2 个异常不会生成无法访问的代码警告?

    为什么以下代码行不会创建编译器警告 void Main throw new Exception throw new Exception 据我所知 编译器应该通知您无法到达第二个抛出异常 这显然是一个编译器错误 它是在 C 3 0 中引入的
  • fgets溢出后如何清除输入缓冲区?

    当输入字符串超出其预定义限制时 我遇到了 fgets 的小问题 以下面的例子为例 for index 0 index lt max index printf Enter the d string index 1 if fgets input
  • 为什么这个位图图像在加载后会改变大小?

    快速提问 我有这个1000 1000位图图像 我使用这个例程来加载它 private BitmapSource initialBitmap new BitmapImage new Uri C Users Desktop Original b
  • 在 clang 中向量化函数

    我正在尝试根据此用 clang 对以下函数进行矢量化铿锵参考 http llvm org docs Vectorizers html 它采用字节数组向量并根据以下条件应用掩码this RFC https www rfc editor org
  • 与派生表的内连接

    我对连接派生表的基本语法有疑问 这是使用的基本语法吗 select from table1 a inner join select from table2 as T1 on 1 ID T1 ID 那行得通吗 您是在问加入两个子查询吗 尝试
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • 为什么我可以在另一个函数中定义一个函数?

    请参阅下面的代码 我在另一个函数中定义了一个函数 void test1 void void test2 void printf test2 n printf test1 n int main void test1 return 0 这个用法
  • 如何防止 Lotus Notes 用户转发或复制通过 System.Net.Mail 发送的邮件?

    我想使用 SMTP 客户端 uiing microsft net 以 C 作为编程语言发送电子邮件 但是对于通过SMTP客户端发送的电子邮件 我们是否可以添加 禁止转发 或 禁止复制 等安全功能 我不希望电子邮件的收件人转发或复制电子邮件的
  • 在多线程环境中捕获信号

    我有一个大型程序 需要尽可能具有弹性 并且有大量线程 我需要捕获所有信号SIGBUS SIGSEGV 并在必要时重新初始化有问题的线程 或者禁用该线程以继续减少功能 我的第一个想法是做一个setjump 然后设置信号处理程序 可以记录问题
  • 为什么存在系统调用

    我一直在阅读有关系统调用及其在 Linux 中如何工作的内容 我还有更多的阅读要做 但我读过的一件事都没有回答 那就是 为什么我们需要系统调用 我知道系统调用是用户空间程序要求内核执行某些操作的请求 但我的问题基本上是 为什么用户空间程序本
  • 使用通用存储库模式和流畅的 nHibernate

    我目前正在开发一个中型应用程序 它将访问不同站点上的 2 个或更多 SQL 数据库等 我正在考虑使用类似的东西 http mikehadlow blogspot com 2008 03 using irepository pattern w
  • 选择具有按两列分组的最大值的行

    我见过很多关于此类问题的解决方案 尤其是这个SQL 仅选择列上具有最大值的行 https stackoverflow com questions 7745609 sql select only rows with max value on
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem
  • 如何使用 Microsoft Graph API 更新 MailboxSettings

    我想从不同的日历更新邮箱设置 如何构建可以通过 Microsoft Graph 更新 MailboxSetting 的请求 这是我的代码示例 但有例外 代码示例 User obj GraphServiceClient Users roomC

随机推荐

  • Woocommerce 中价格较低的产品的购物车折扣

    如何在产品购物车中为价格较低的产品应用折扣 例如 我的购物车中有两种产品 一种售价 150 美元 另一种售价 200 美元 我只想对成本较低的产品 在本例中为第一个产品 应用 10 的折扣 我有这个代码 但它仅适用于购物车中的第二个产品 a
  • git fetch 和 git fetch origin master 之间的区别

    I was 进行获取 合并并想知道这样做是否有什么区别 git fetch and git fetch origin master 我没有任何其他分支和起源点到我的remote repository在 GitHub 上 当我做 git fe
  • 在 Windows 中暂停进程

    我正在为 Windows 上的 ffmpeg 制作一个漂亮的小型 Python GUI 前端 专门设计用于将视频转换为 iPhone 友好的格式并自动将其导入 iTunes 并对其进行标记 并且我希望它能够工作 以便您可以暂停该过程并根据需
  • 带接口的 JsonConverter

    我有一个来自客户端的对象 并自动从 Web Api 2 反序列化 现在我的模型的一个属性有问题 该属性 CurrentField 是 IField 类型 并且该接口有 2 种不同的实现 这是我的模型 只是一个假人 public class
  • Google Maps API,InfoWindow domready 事件处理程序出错

    我正在信息信息窗口中设置一个表单 用于众包位置数据 我已经一切就绪并正在运行 但我试图在信息窗口弹出时将纬度和经度值复制到表单元素中 我在地图 div 上成功使用了其他事件侦听器 但是当我使用domready信息窗口的事件处理程序我收到错误
  • 是否可以使用 Java 格式化记忆棒、笔式驱动器或磁盘? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想创建一个多平台实用程序来格式化 擦除记忆棒 磁盘等 在Java中可以做到这一点吗 或者我是否需要为每个操作系统平台调用本机方法 这是非常特定于系统的 没有通用的方法来执行此操
  • 多个 if 语句的替代方案

    我的代码包含很多if声明 有没有其他方法可以摆脱这些陈述 例如假设我有以下条件 if t1 gt 1 t2 0 t3 0 div b class fadeIn if t1 0 t2 gt 1 t3 0 div c class fadeIn
  • 当选择选项时,Jquery 提交选择表单

    我有一个选择 有一个很长的列表 我可以在其中搜索它 使用 select2 jquery pluing 我的选择 using Html BeginForm ProjectList Client FormMethod Get new id cl
  • 在 JavaScript 中使异步事件同步

    我正在使用 WPF 3 5SP1 WebBrowser 控件来显示包含一些 javascript 函数的页面 然后我的程序需要调用一个 javascript 函数来进行异步调用 我需要一种方法将异步回调的结果返回到 C 以便我可以处理结果
  • 带有外键的 Django ModelForm

    我正在尝试创建一个ModelForm使用外键更新表 我所拥有的似乎有效 但我希望有人能告诉我是否有更好的方法来做到这一点 或者我在下面做的方式是否有问题 使用查询集是否正确Author and Genres桌子 感觉我应该在Book模型 并
  • R:当存在平局时,找到每行中具有最小值的列

    这是我的数据示例 gt dat lt matrix c 59 50 48 44 44 NA 78 59 42 67 51 NA 72 64 64 byrow TRUE ncol 3 gt k lt apply dat 1 function
  • 如何让 bash 脚本循环直到特定时间

    通常要运行无限 bash 循环 我会执行如下操作 while true do echo test sleep 1 done 相反 如果我想做一个只要早于 20 00 就无限循环的循环 该怎么办 有没有办法在 bash 中做到这一点 您可以使
  • 在 Android Gradle 构建之前执行任务?

    Gradle 是否可以在调用之前执行任务 gradle build 就像是precompile 请有人帮忙 这样的事情可能吗 如何实现 你可以这样做 task build lt lt println build task preBuild
  • SBT 0.13 中的任务定义不接受打印?

    我正在使用SBT0 13 1 项目 build properties如下 sbt version 0 13 1 执行中sbt about打印出以下内容 sbt info Loading global plugins from Users j
  • 访问子文件夹中的 m 文件,而不将其永久添加到路径中

    我已经下载了一个工具箱 其中有许多子文件夹中的许多文件 空间计量经济学工具箱 用于一个特定项目 我不想将其添加到路径中 因为我认为我不会养成使用它的习惯 而且我不知道它是否会隐藏函数统计工具箱 如何访问此工具箱中的功能 有没有办法以编程方式
  • 如何使用hibernate将图像存储到postgres数据库中

    我想使用 hibernate 和 Java 将图像存储到数据库中 我正在使用 postgres 数据库 I tried bytea存储图像的数据类型和byte hibernate pojo 中的数据类型 我使用了以下代码 CREATE TA
  • 寻找局部最大值和最小值

    我正在寻找一种计算有效的方法来查找 R 中大量数字的局部最大值 最小值 希望没有for循环 例如 如果我有一个像这样的数据文件1 2 3 2 1 1 2 1 我希望函数返回 3 和 7 它们是局部最大值的位置 diff diff x or
  • 在 VB.Net 中使用 LINQ 将集合拆分为 n 个部分

    Question 在 VB Net 中 如果我有一个像这样的集合 Dim collection As IEnumerable Of Integer Enumerable Range 0 99 我如何将它分成不确定数量的元素的组 可枚举的 状
  • Python Boto EC2 查找给定 IP 地址的实例

    在Python中使用boto 如何在给定IP地址的情况下找到boto ec2实例对象 boto3 ec2 boto3 client ec2 filters Name ip address Values 1 1 1 1 result list
  • 如何从SQL Server表中下载并查看图像?

    我有个问题 我想从 SQL Server 表下载并在浏览器中查看图像 我不知道该怎么办 My code public partial class IndexForm System Web UI Page protected void Pag