PDA

View Full Version : سوال: خواندنعکس از db و نمایش آن در repeater



saeidgab
دوشنبه 30 فروردین 1389, 18:15 عصر
سلام،
می خوام یکسری عکس رو از دیتابیس بخونم و در داخل repeater نمایش بدم. با کنترل image نتونستم این کار رو بکنم چون نمیدونم چطوری عکس رو در html داخل کنترل image ست کنم.

marijooon
دوشنبه 30 فروردین 1389, 20:33 عصر
عکس هات درون دیتابیس به صورت باینری ذخیره شده یا آدرسشونو ذخیره کردی؟

General-Xenon
دوشنبه 30 فروردین 1389, 20:54 عصر
سلام،
می خوام یکسری عکس رو از دیتابیس بخونم و در داخل repeater نمایش بدم. با کنترل image نتونستم این کار رو بکنم چون نمیدونم چطوری عکس رو در html داخل کنترل image ست کنم.

سلام دوست عزیز...
شما با دادن مسیر و ID به image box می تونی اینکارو انجام بدی.....

این سورس عکس رو لود میکه و تبدیل به فرمت خروجی JPG میکنه....
فقط کافیه مسیر این سورس بدی با ID اون عکس....

مثال:


<img src="DB_IMG.ashx?pid=<%# Eval("ID") %>" />
اما سورس.....
اول یک Generic Handler می سازی...و این سورس رو توش می نویسی...



<%@ WebHandler Language="C#‎‎" Class="DB_IMG" %>

using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.Data.SqlClient;
using System.IO;
using System.Configuration;
using System.Collections;

public class DB_IMG : IHttpHandler {

public void ProcessRequest(HttpContext context)
{
SqlConnection CN336546546 = new SqlConnection(System.Web.Configuration.WebConfigur ationManager.ConnectionStrings["DBConnection"].ConnectionString);

context.Response.ContentType = "image/jpeg";
context.Response.Cache.SetCacheability(HttpCacheab ility.NoCache);
context.Response.BufferOutput = false;
string enc1 = "";
if (context.Request.QueryString["pid"] != null && context.Request.QueryString["pid"] != "")
enc1 = context.Request.QueryString["pid"].ToString();
System.IO.MemoryStream strm = new System.IO.MemoryStream();
try
{
CN336546546.Open();
SqlCommand cmd = new SqlCommand("SELECT [USERIMAGE] FROM [TB_USER] WHERE [ID]=" + enc1, CN336546546);
byte[] img = (byte[])cmd.ExecuteScalar();
strm.Write(img, 0, img.Length);
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(strm);
bmp.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
finally
{
CN336546546.Close();
strm.Close();
}
}

public bool IsReusable {
get {
return true;
}
}

}

saeidgab
سه شنبه 31 فروردین 1389, 23:13 عصر
با تشکر از General_Xenon،
حالا یکسری از رکورد ها عکس ندارن که هنگام نمایش صفحه علامت ضربدر می افته چطوری می تونم از نمایش اون جلوگیری کنم؟

General-Xenon
چهارشنبه 01 اردیبهشت 1389, 02:46 صبح
دوست عزیز...می تونی از کلاس Stream استفاده کنی :: می تونی حجم فایل رو بررسی کنی و اگر 0 بود نمایش نده...کلاسش رو بنویس و فقط کافیه اون کلاس رو تو ریپیتر لود کنی...:چشمک: