【问题标题】:display image that stored in database asp.net显示存储在数据库 asp.net 中的图像
【发布时间】:2016-09-19 17:24:40
【问题描述】:

这是我的数据库:

 create table images 
(
 ID int primary key identity, 
 Name nvarchar(255),
 Size int, 
 ImgData varbinary(max) 
)

CREATE PROCEDURE UploadImages
 @Name nvarchar(255),
 @Size int,
 @ImgData varbinary(max),
 @NewId int output
AS
BEGIN
   INSERT INTO images
     VALUES (@Name, @Size, @ImgData)

SELECT @NewId = SCOPE_IDENTITY()    
END

Create procedure spGetImageById 
@ID int
as
Begin
Select ImgData
from images where ID=@ID
End

这是我在管理页面中的代码,我编写它以将图像保存在数据库中,并且超链接似乎可以在另一个页面中看到图像以确保它是正确的图像:

HttpPostedFile PostedFile = FileUpload1.PostedFile;

string fileName = Path.GetFileName(PostedFile.FileName);
string fileExtension = Path.GetExtension(fileName);
int fileSize = PostedFile.ContentLength;

if(fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".bmp"|| fileExtension.ToLower() == ".gif" || fileExtension.ToLower() == ".png")
 {
  Stream stream = PostedFile.InputStream;
  BinaryReader binaryReader = new BinaryReader(stream);

  byte[] bytes = binaryReader.ReadBytes((int)stream.Length);

  string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

  using (SqlConnection con = new SqlConnection(cs))
    {
       SqlCommand cmd = new SqlCommand("UploadImages", con);
       cmd.CommandType = CommandType.StoredProcedure;

       con.Open();

     SqlParameter paramName = new SqlParameter()
     {
         ParameterName = "@Name",
         Value = fileName
     };
     cmd.Parameters.Add(paramName);

     SqlParameter paramSize = new SqlParameter()
     {
         ParameterName = "@Size",
         Value = fileSize
     };
     cmd.Parameters.Add(paramSize);

     SqlParameter paramImgData = new SqlParameter()
     {
         ParameterName = "@ImgData",
         Value = bytes
     };
     cmd.Parameters.Add(paramImgData);

     SqlParameter paramNewId = new SqlParameter()
     {
         ParameterName = "@NewId",
         Value =-1,
         Direction = ParameterDirection.Output
     };
     cmd.Parameters.Add(paramNewId);

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

     Lmas.Visible = true;
     Lmas.Text = "done";
     Lmas.ForeColor = System.Drawing.Color.Green;
     HyperLink1.Visible = true;
     HyperLink1.NavigateUrl = "~/ShowImage.aspx?Id=" + cmd.Parameters["@NewId"].Value.ToString();
    } 
} 
  else 
  {
    Lmas.Visible = true;
    Lmas.Text = "only images (.jpg .png .gif .bmp) can be uploaded";
    Lmas.ForeColor = System.Drawing.Color.Red;
     HyperLink1.Visible = false;
   }

我写这篇文章是为了对图像进行评论:

    string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
      using (SqlConnection con = new SqlConnection(cs))
     {
          SqlCommand cmd = new SqlCommand("spGetImageById", con);
         cmd.CommandType = CommandType.StoredProcedure;

        SqlParameter paramID = new SqlParameter()
        {
            ParameterName = "@ID",
            Value = Request.QueryString["ID"]
        };
        cmd.Parameters.Add(paramID);

        con.Open();
        cmd.ExecuteScalar();
        byte[] bytes = (byte[])cmd.ExecuteScalar();
        string strBase64 = Convert.ToBase64String(bytes);
        Image1.ImageUrl = "data:Image/png;base64," + strBase64;
        }

我想在我的主页中的 img-tag 中显示图像。 所以我试图将让您查看图像的代码复制到我的主页中,但它说:“过程或函数'spGetImageById'需要参数'@ID',但未提供”。

【问题讨论】:

  • 你确定是png吗?
  • 是的,我确定。当我将其设为 jpg 并上传 jpg 文件时也无法正常工作
  • 这段代码只有在显示到ShowImage.aspx中才能显示出来。但是当我尝试使用它在 img-tag 或标签中显示图像时它不起作用
  • 也使用小写的 data:image/png,可能不会有什么不同。但试试吧。
  • 可能是代码的上下文,就像它在IsPostback 中运行一样?使用调试器捕获数据 uri 的结果并将其粘贴到带有 img 标记的简单 html 文件中。在浏览器中打开,看看它是否有效。这缩小了问题所在。

标签: c# asp.net asp.net-mvc database sql-server-2008


【解决方案1】:

确保获取所有字节,尝试替换

string strBase64 = Convert.ToBase64String(bytes);

string strBase64 = Convert.ToBase64String(bytes, 0, bytes.Length); 

Image一词也改为小写:

Image1.ImageUrl = "数据:图像/png;base64," + strBase64;

【讨论】:

  • 你能把base64字符串粘贴到这里吗?我想看看它是否看起来像一个base64字符串。
  • 我尝试在主页中显示图像,因此将代码复制到我的主页并显示:“过程或函数'spGetImageById'需要参数'@ID',但未提供。”跨度>
  • 听起来您没有将 ID 传递给查询字符串,请确保在调用主页时:whatever/your_main_page.aspx?ID=1234
  • 同理。没什么变化
  • 能否在页面上右击(查看源代码)并粘贴图片标签的样子?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多