C# 显示存储在数据库asp.net中的图像
这是我的数据库:C# 显示存储在数据库asp.net中的图像,c#,asp.net,asp.net-mvc,database,sql-server-2008,C#,Asp.net,Asp.net Mvc,Database,Sql Server 2008,这是我的数据库: 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 INSE
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;
}
我写这篇文章是为了给imges做一个回顾:
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标签的主页中显示图像。
因此,我尝试将让您查看图像的代码复制到我的主页中,但它显示:“过程或函数'spGetImageById'需要参数'@ID',但未提供参数”。请确保获取所有字节,尝试替换
string strBase64 = Convert.ToBase64String(bytes);
与
在单词图像上也更改为小写:
Image1.ImageUrl=“数据:图像/png;base64,”+strBase64 确保获取所有字节,尝试替换
string strBase64 = Convert.ToBase64String(bytes);
与
在单词图像上也更改为小写:
Image1.ImageUrl=“数据:图像/png;base64,”+strBase64 你确定这是png吗?是的,我确定。当我把它做成jpg并上传jpg文件时,它的代码不工作,只有当它显示到ShowImage.aspx中才能显示它。但当我尝试使用它在img标记或标签中显示图像时,它不起作用。使用小写数据:image/png也可能没有什么区别。但是试试看。可能是代码的上下文,比如它是否在
IsPostback
中运行?使用调试器捕获数据uri的结果,并将其粘贴到带有img
标记的简单html文件中。在浏览器中打开,查看它是否工作。这缩小了问题的范围。你确定这是png吗?是的,我确定。当我把它做成jpg并上传jpg文件时,它的代码不工作,只有当它显示到ShowImage.aspx中才能显示它。但当我尝试使用它在img标记或标签中显示图像时,它不起作用。使用小写数据:image/png也可能没有什么区别。但是试试看。可能是代码的上下文,比如它是否在IsPostback
中运行?使用调试器捕获数据uri的结果,并将其粘贴到带有img
标记的简单html文件中。在浏览器中打开,查看它是否工作。这就缩小了问题的范围。你能把base64字符串粘贴到这里吗?我想看看它是否看起来像base64字符串。我尝试在主页中显示图像,因此将代码复制到我的主页,它显示:“过程或函数'spGetImageById'需要参数'@ID',但未提供参数”。“听起来您没有在查询字符串上传递ID,请确保调用主页时:相同。”。没有任何更改您可以右键单击页面(查看源代码)并设置图像标记的外观吗?您可以在此处粘贴base64字符串吗?我想看看它是否看起来像base64字符串。我尝试在主页中显示图像,因此将代码复制到我的主页,它显示:“过程或函数'spGetImageById'需要参数'@ID',但未提供参数”。“听起来您没有在查询字符串上传递ID,请确保调用主页时:相同。”。没有任何更改。您可以右键单击页面(查看源代码)并设置图像标记的外观吗?