如何下载存储在sql server中的图像

时间:2011-05-04 10:12:40

标签: c# asp.net sql-server

我正在开发一个在sql server DB中存储图像的Web应用程序。我使用'Image'数据类型将图像存储在表中。当用户点击按钮时,我想给“打开/另存为”选项。如何在c#asp.net中做到这一点?

我正在使用的代码位于

之下
 conn = connect.getConnection();
 selcmd = new System.Data.SqlClient.SqlCommand("select image from tblQuestion where qid=" + context.Request.QueryString["qid"], conn);
          conn.Open();
          rdr = selcmd.ExecuteReader();
          while (rdr.Read())
          {
            context.Response.ContentType = "image/jpg";
            context.Response.AddHeader("content-disposition","attachment;filename=Tr.png");
            context.Response.BinaryWrite((byte[])rdr["image"]);

          }

但仍然无法正常工作

4 个答案:

答案 0 :(得分:2)

  1. 将Response.ContentType设置为 图像的相关mime类型(例如“image / jpg”)
  2. 设置内容配置 标题为“附件”,以便 提示用户保存文件
  3. 使用Response.BinaryWrite方法 将图像字节写入页面 输出流
  4. 正如你所看到的那样,除了眼睛之外还有更多的东西,希望那些关键点加上谷歌的力量将让你前进:)

答案 1 :(得分:0)

检查此链接以从数据库获取图像

GettingFromDB

Geeting from the Path saved

这是您需要的

Image

答案 2 :(得分:0)

您必须将图像转换为字节数组。使用以下代码进行投射:

           if (dataReader["Image"] != DBNull.Value)
            {
                byte[] storedImage = (byte[])(dataReader["Image"]);
                orderMaster.Photo = storedImage;
            }

此处图像字段位于DB中的图像类型中。

然后使用system.Drawing从字节数组创建图像,并将位置指向显示图像的控件。

    private void byteArrayToImage(byte[] byteArray)
    {
        if (byteArray != null)
        {
            MemoryStream ms = new MemoryStream(byteArray);
            System.Drawing.Image img = System.Drawing.Image.FromStream(ms, false,  false);
            /*last argument is supposed to turn Image data validation off*/
            img.Save(Server.MapPath("Photo/image.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
            ms.Close();
            //Image1.ImageUrl = Server.MapPath("Photo/image.jpg");
            imgViewPhoto.ImageUrl = ConfigurationManager.AppSettings["PhotoFolder"].ToString() + "Photo/image.jpg";   
        }
    }

希望这会对你有帮助..

答案 3 :(得分:0)

检查此代码.. 我会将任何东西存储在数据库中并从数据库中检索..

    Dim con As New SqlConnection
    con.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
    con.Open()

    Dim objbytes() As Byte
    ReDim objbytes(FileUpload1.PostedFile.InputStream.Length)
    ' Dim query As String = "insert into files(files,ext) values('" & objbytes & "','" & FileUpload1.FileName.Substring(FileUpload1.FileName.LastIndexOf(".") + 1) & "'"
    Dim query As String = "insert into files(files,ext) values(@files,@ext)"
    FileUpload1.PostedFile.InputStream.Read(objbytes, 0, FileUpload1.PostedFile.InputStream.Length)

    Dim cmd As New SqlCommand(query, con)

    cmd.Parameters.AddWithValue("@files", objbytes)
    cmd.Parameters.AddWithValue("@ext", FileUpload1.FileName.Substring(FileUpload1.FileName.LastIndexOf(".") + 1))
    cmd.ExecuteNonQuery()
    'FileUpload1.PostedFile.InputStream.Read(objbytes, 0, FileUpload1.PostedFile.InputStream.Length)
    Dim ds As New DataSet
    Dim adp As New SqlDataAdapter("select files,ext from files", con)
    adp.Fill(ds)
    For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
        ' Dim enc As System.Text.Encoding = System.Text.Encoding.ASCII

        'Dim objbyte1s() As Byte = enc.GetBytes(ds.Tables(0).Rows(i).Item(0))

        System.IO.File.WriteAllBytes(Server.MapPath("~/files/file1." & ds.Tables(0).Rows(i).Item(1)), ds.Tables(0).Rows(i).Item(0))
        'Response.BinaryWrite(ds.Tables(0).Rows(i).Item(0)))
    Next