【发布时间】: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