PDA

View Full Version : سوال: جنريت كردن تصوير توسط يك Handler



peymannaji
یک شنبه 09 خرداد 1389, 07:54 صبح
با سلام

براي اينكه اطلاعات باينري عكس رو از ديتابيس گرفته و نمايش بدم از يك فايل aspx استفاده كردم و كد زير رو در اون استفاده كردم :



MemoryStream ms = new MemoryStream((byte[]) ((ImagePage) imagelist[0]).Image);
multi = new Bitmap(ms);
myImageCodecInfo = GetEncoderInfo("image/tiff");
myEncoder = Encoder.SaveFlag;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder,(long) EncoderValue.MultiFrame);
myEncoderParameters.Param[0] = myEncoderParameter;
MemoryStream ms3 = new MemoryStream();
multi.Save(ms3, myImageCodecInfo, myEncoderParameters);

Response.ContentType = "image/tiff";
Response.AddHeader("Content-Disposition", "attachment;filename=" + "Images" + ".tiff");
Response.BinaryWrite(ms3.GetBuffer());



مسئله بنده اينجاست كه تصوير بجاي نمايش دانلود ميشه . يعني ديالوگ دانلود باز ميشه . چكار بايد كرد كه اين اتفاق نيوفته ؟

Behrouz_Rad
یک شنبه 09 خرداد 1389, 08:35 صبح
فرصت Reproduce ندارم اما به احتمال زیاد هدر Content-Disposition کار رو خراب کرده...
به شکل ذیل می تونی بنویسی:


FileStream fs = new FileStream(@"C:\image.jpg", FileMode.Open, FileAccess.Read);

BinaryReader br = new BinaryReader(fs);

Byte[] bytes = br.ReadBytes((Int32)fs.Length);

Response.Clear();
Response.ContentType = "image/jpeg";
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();


نحوه ی خوندن از دیتابیس رو فقط خودت می دونی. به جای مسیر فیزیکی که نوشتم مکانیزم خودت رو قرار بده.

موفق باشید.

salehbagheri
یک شنبه 09 خرداد 1389, 08:56 صبح
Response.ContentType = "image/tiff";

فكر نميكنم مرورگرها فايلهاي tiff رو پشتيباني كنند!

بنابراين براي نمايش ميتونيد از تگ Embed كمك بگيريد.



<embed width=200 height=200
src="tiffdocument.tif" type="image/tiff"
negative=yes>

Behrouz_Rad
یک شنبه 09 خرداد 1389, 09:37 صبح
فكر نميكنم مرورگرها فايلهاي tiff رو پشتيباني كنند!

بنابراين براي نمايش ميتونيد از تگ Embed كمك بگيريد.



<embed width=200 height=200
src="tiffdocument.tif" type="image/tiff"
negative=yes>

برادر، منظور ایجاد کننده ی تاپیک، Streaming عکس هست. مثلاً آدرس آواتار شما در سایت برنامه نویس به شکل ذیل هست:
http://barnamenevis.org/forum/image.php?u=39960&dateline=1270214642

یک سری مشخصه به فایل image.php پاس داده میشه و اون فایل تصویر آواتار شما رو Stream می کنه.

موفق باشید.

alireza_s_84
یک شنبه 09 خرداد 1389, 09:59 صبح
با سلام
براي اينكه اطلاعات باينري عكس رو از ديتابيس گرفته و نمايش بدم از يك فايل aspx استفاده كردم و كد زير رو در اون استفاده كردم :
مسئله بنده اينجاست كه تصوير بجاي نمايش دانلود ميشه . يعني ديالوگ دانلود باز ميشه . چكار بايد كرد كه اين اتفاق نيوفته ؟

سلام:
علت بارگزاری تصویر اینه که فقط بعضی فرمت ها جهت نمایش در صفحه هستند و وقتی شما عکسی رو درخواست میدی اگر قرار باشه استریم بشه یا باید jpeg باشه یا gif و یا bitmap لذا این نحوه استریم کردن شما باعث بارگزاری عکس میشه میتونی اینجور تغییر بدی:

MemoryStream ms = new MemoryStream((byte[]) ((ImagePage) imagelist[0]).Image);
Response.Clear();
Response.ContentType = "image/tiff";
ms.WriteTo(Context.Response.OutputStream);
Context.Response.Flush();
Context.Response.End();

موفق باشی