【发布时间】:2010-10-16 11:34:19
【问题描述】:
我希望在 updateprofilepicture 页面上将图片 jpeg、gif 等文件上传到 SQL 数据库中。然后在配置文件页面上,我想从 sql 数据库中检索图像并将其显示在 Asp:Image 控件中。我有很多代码试图做到这一点,但它不起作用。该表包含一个 Image 类型的列。
【问题讨论】:
我希望在 updateprofilepicture 页面上将图片 jpeg、gif 等文件上传到 SQL 数据库中。然后在配置文件页面上,我想从 sql 数据库中检索图像并将其显示在 Asp:Image 控件中。我有很多代码试图做到这一点,但它不起作用。该表包含一个 Image 类型的列。
【问题讨论】:
正如 Joel 所说,您应该使用 HttpHandler 或页面来显示图像。这是输出图像的示例代码(Image.ashx):
// ProcessRequest method of Image.ashx
long imageId = Convert.ToInt64(Request.QueryString["ImageId"]);
using (var conn = new SqlConnection(connectionString))
using (var command = new SqlCommand(
"SELECT ImageFile FROM ImageTable WHERE ImageId = @ImageID", conn))
{
command.Parameters.Add("@ImageID", SqlDbType.Int).Value = imageId;
conn.Open();
Response.ContentType = "image/gif";
Response.BinaryWrite((byte[]) command.ExecuteScalar());
}
然后在您的页面中使用图像:
<asp:Image id="Image1" runat="server" ImageUrl="Image.ashx?ImageID=12"/>
【讨论】:
这里要记住的重要一点是,您不应该尝试与个人资料页面本身一起传输图像数据。相反,您希望您的个人资料页面为浏览器生成如下所示的 HTML 标记:
<img src="~/MyImageHandler.ashx?UserID=1234" alt="User 1234 avatar" width="100px" height="150px" />
这是您的<asp:Image .../> 控制的最终结果。然后浏览器将发送一个完全独立的 Http 请求来检索图像。这就是网站上的图片的工作方式。然后,您需要能够处理该附加请求。为此,请创建一个Http handler (*.ashx file) 并使用它从数据库中检索适当的图像数据并将其发送到浏览器。
【讨论】:
如果您使用的是 SQL 2005 或更高版本,则不应使用数据类型 Image,因为它现在是 deprecated。相反,如果可能,您希望使用新的 Varbinary(MAX) 类型。存储它后,您需要做的就是通过 ADO.Net 调用检索它并将单元格值转换为 Byte[] 类型,然后像上面 ScarletGarden 的示例一样调用 Response.BinaryWrite。
【讨论】:
看了几百G的图片后,相信你会发现自己认为操作系统的文件系统和静态文件http服务器比数据库更适合存储图片。它还允许您使用数千种现有的免费工具来处理、移动、托管等图像。
【讨论】:
不要将图像存储在数据库中,而是存储图像的路径和/或文件名。图像将填满数据库并使其变慢。
【讨论】:
protected void Page_Load(object sender, EventArgs e) {
GridView1.DataSourceID = "";
GridView1.DataSource = SqlDataSource1;
GridView1.DataBind();
}
protected void btnSubmit_Click(object sender, EventArgs e) {
string strImageName = txtImageName.Text.ToString();
if (FileUpload1.PostedFile != null && FileUpload1.PostedFile.FileName != "") {
byte[] imageSize = new byte[FileUpload1.PostedFile.ContentLength];
HttpPostedFile uploadedImage = FileUpload1.PostedFile;
uploadedImage.InputStream.Read(imageSize, 0, (int)FileUpload1.PostedFile.ContentLength);
// Create SQL Connection
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=RND3" + "\\" + "SQLEXPRESS;Initial Catalog=SSSolutionFiles;Integrated Security=True";
// Create SQL Command
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "INSERT INTO Imagess(ImageName,Image)" + " VALUES (@ImageName,@Image)";
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
SqlParameter ImageName = new SqlParameter("@ImageName", SqlDbType.VarChar, 50);
ImageName.Value = strImageName.ToString();
cmd.Parameters.Add(ImageName);
SqlParameter UploadedImage = new SqlParameter("@Image", SqlDbType.Image, imageSize.Length);
UploadedImage.Value = imageSize;
cmd.Parameters.Add(UploadedImage);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Label1.Text = "File Uploaded";
GridView1.DataSourceID = "";
GridView1.DataSource = SqlDataSource1;
GridView1.DataBind();
con.Close();
}
}
【讨论】:
试试这些链接可能对你有帮助..
您也可以尝试将图像文件存储在服务器上并将路径存储在 Sql 表中.. 通过这些链接
http://pratikataspdotnet.blogspot.in/2014/11/retrieve-images-from-path-stored-in.html
【讨论】: