PDA

View Full Version : عدم نمایش عکس



arsalansalar
سه شنبه 03 اردیبهشت 1387, 14:54 عصر
من برای لود عکس در یک repater از کد زیر استفاده می کنم:


<asp:RepeaterID="rpt"runat="Server">
<HeaderTemplate>
<tableborder="2">
</table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%#Container.DataItem("tti")%>
</td>
<td>
<%#Container.DataItem("tsh")%>
</td>
<td>
<asp:ImageHeight="100"Width="100"runat="Server"ImageUrl='<%# Container.DataItem( "ppic" ) %>'/></td>
</tr>
<p>
</p>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>


Dim con As OleDbConnection
Dim cmdSelect As OleDbCommand
Dim dr As OleDbDataReader
con = New OleDbConnection(String.Format("provider = microsoft.jet.oledb.4.0 ; data source = {0}", Server.MapPath("~") + "\App_Data\web.mdb"))
con.Open()
cmdSelect = New OleDbCommand("Select tti , tsh, ppic From data", con)
dr = cmdSelect.ExecuteReader()
rpt.DataSource = dr
rpt.DataBind()
dr.Close()
con.Close()

ولی زمانی که برنامه را run می کنم به جای نمایش عکس,عکس زیر را نمایش می دهد
مشکل از کجاست؟

arsalansalar
سه شنبه 03 اردیبهشت 1387, 14:57 عصر
ببخشید یادم رفت عکسو بذارم.
اینم عکسش:

Alireza_Salehi
سه شنبه 03 اردیبهشت 1387, 15:24 عصر
روی همون عکس کلیک راست کنید و بعد Properties ، تا ببینید آدرسی که لود شده درسته یا نه!

arsalansalar
سه شنبه 03 اردیبهشت 1387, 15:26 عصر
در قسمت آدرس مینویسه:not avalible
ولی من از آدرس دهیم مطمئن هستم.حتی آدرس رو به صورت کامل هم در بانک ذخیره کردم ولی باز همان مشکل هست.:عصبانی++:

raravaice
سه شنبه 03 اردیبهشت 1387, 15:32 عصر
چرا از تگ img> معمولی و خاصیت src اون استفاده نکردی؟

موفق باشید

arsalansalar
سه شنبه 03 اردیبهشت 1387, 15:35 عصر
یعنی کدو و به شکل زیر دربیارم؟
اگر منظورتون این هست من این کار را انجام دادم ولی بازم حل نشد.


<asp:ImageID="Image1"Height="100"Width="100"runat="Server"src='<%# Container.DataItem("ppic")%>'/></td>

زمانی که آدرس کامل در بانک ذخیره می کنم به صورت:C:\img\a.jpg
اون علامتی که در بالا نشان دادم میاد ولی زمانی که آدرس غلط تایپ می کنم علامت ضربدر نمایش داده می شود.

Alireza_Salehi
سه شنبه 03 اردیبهشت 1387, 16:11 عصر
not availiable یعنی آدرس مورد نظر وجود ندارد! (ASP.NET نتونسته تبدیلش کنه- حقم داره آدرس استاتیک نمیفهمه)

آدرس ها رو به صورت نسبی در بانک ذخیره کنید. (از MapPAth استفاده نکنید)

arsalansalar
سه شنبه 03 اردیبهشت 1387, 16:17 عصر
به شکل زیر در بانک ذخیره شده

C:\img\a.jpg
البته زمانی که عکس به صورت مثلا a.jpg هس نمایش داده می شود ولی به محض اینکه عکسها درون پوشه می رود نمایش داده نمی شود.

Alireza_Salehi
سه شنبه 03 اردیبهشت 1387, 16:19 عصر
آدرس ها رو به صورت نسبی در بانک ذخیره کنید. (از MapPath استفاده نکنید)

مثلا اگر عکس ها در پوشه Images در ریشه وب سایت قرار دارند به این صورت:


~/Images/Image01.jpg

twelve
سه شنبه 03 اردیبهشت 1387, 19:04 عصر
در تایید صحبتهای دوستمون arsp_2004



یعنی کدو و به شکل زیر دربیارم؟
اگر منظورتون این هست من این کار را انجام دادم ولی بازم حل نشد.



<asp:ImageID="Image1"Height="100"Width="100"runat="Server"src='<%# Container.DataItem("ppic")%>'/></td>


خیر ، منظور دوستمون raravice استفاده از المنت <img> بود که من هم باهاش موافقم.


<img src=" " alt = " " />

گاهی عناصر HTML کار آمد تر و مشکل گشا تر هستند.

arsalansalar
چهارشنبه 04 اردیبهشت 1387, 09:08 صبح
آدرس ها رو به صورت نسبی در بانک ذخیره کنید. (از MapPath استفاده نکنید)

مثلا اگر عکس ها در پوشه Images در ریشه وب سایت قرار دارند به این صورت:


~/Images/Image01.jpg

دوست عزیزم من به شکی که شما فرمودید آدرس را تغییر دادم و در قسمت proprties عکس در قسمت آدرس یه شکل زیر در آمد

http://localhost:2054/siasatiran/~/App_Data/ImageUser/ali.gif
ولی این بار علامت ضربدر به جای عکس به نمایش در می آید

Alireza_Salehi
چهارشنبه 04 اردیبهشت 1387, 09:46 صبح
دوست عزیزم من به شکی که شما فرمودید آدرس را تغییر دادم و در قسمت proprties عکس در قسمت آدرس یه شکل زیر در آمد

http://localhost:2054/siasatiran/~/App_Data/ImageUser/ali.gif
ولی این بار علامت ضربدر به جای عکس به نمایش در می آید

به این نکات دقت کنید:

برای نشان دادن ریشه وب سایت :
اگر از کنترل های ASP.NET استفاده می کنید:

~/
اگر از کنترل های HTML استفاده می کنید:

../
برای نشان دادن ریشه وب سرور(فرقی در نوع کنترل ندارد):

/



<asp:Image ID="Image1" runat="server" ImageUrl="~/App_Data/ImageUser/ali.gif"/>
<img alt="" src="../App_Data/ImageUser/ali.gif"/>


ضرب در وقتی نشان داده می شود که آدرس موجود است (درست تفسیر می شود) ولی تصویری در کار نیست(آدرس به جای نادرستی اشاره می کند).

arsalansalar
چهارشنبه 04 اردیبهشت 1387, 09:53 صبح
من یک جا خوندم برای اینکه پوشه app_data برای بانک اطلاعاتی هست عکس نمایش نمی دهد(به دلایل امنیتی).میتونه اشکال از اینجا باشه؟(آخه من از آدرسم مطمئن هستم)

Alireza_Salehi
چهارشنبه 04 اردیبهشت 1387, 10:07 صبح
من یک جا خوندم برای اینکه پوشه app_data برای بانک اطلاعاتی هست عکس نمایش نمی دهد(به دلایل امنیتی).میتونه اشکال از اینجا باشه؟(آخه من از آدرسم مطمئن هستم)
اون مطلب سرجاش درست، ولی این آدرس هیچ معنی نداره:

http://localhost:2054/siasatiran/~/App_Data/ImageUser/ali.gif

arsalansalar
چهارشنبه 04 اردیبهشت 1387, 10:15 صبح
اون مطلب سرجاش درست، ولی این آدرس هیچ معنی نداره:

http://localhost:2054/siasatiran/~/App_Data/ImageUser/ali.gif

من طبق فرمایش شما در بانکم آدرس زیر را ذخیره کردم:

~/Imageuser/ali.gif
که نتیجه آن همان آدرسی شد که شما فرمودید بی معنی است.
اگر لطف کنید اشتباه من را بگویید ممنون می شوم.

Alireza_Salehi
چهارشنبه 04 اردیبهشت 1387, 10:59 صبح
از چه کنترلی استفاده کردید؟

arsalansalar
چهارشنبه 04 اردیبهشت 1387, 11:29 صبح
یعنی چی از چه کنترلی استفاده می کنید؟

H_T_O_A
چهارشنبه 04 اردیبهشت 1387, 13:17 عصر
کنترل به اشیایی میگن که تو سر برگ tools هستن مثه: textbox - button - table
فکر کنم منظور دوست عزیزمون اینه که از کنترل image در HTML استفاده می کنی یا asp

البته آدرسی که شما نوشتید به نظر من اشتباهه
شاید در فراخونی اطلاعات پایگاه داده یه مشکلی هست

arsalansalar
چهارشنبه 04 اردیبهشت 1387, 13:31 عصر
من از کنترل asp استفاده می کنم

raravaice
چهارشنبه 04 اردیبهشت 1387, 13:39 عصر
جناب arsalansalar (http://barnamenevis.org/forum/member.php?u=46464) بهتره که شما یه شرحی از وضعیت root اعلام کنید.

بر اساس فرمایشت شما تو پستهای اول "C:\img\a.jpg" به نظر میاد شما درایو C رو root در نظر گرفته اید آیا این مسئله صحت داره؟!!!!!
یا مثلا آیا پوشه imageuser داخل پوشه appdata قرار داره.

من یه شرح فرضی از یه وضعیت فیزیکی میدم شما بر اساس همین امر وضعیت خودتو تشریح کن تا دوستان بررسی کنن و راه حل دقیق بدن.

با فرض داشتن یه روت که منظور پوشه ایه که پایه برنامه سایت شما توی اون قرار داره حالا داخل این فولدر ما یه AppData داریم و داخل اون یه ImageUser که توی فولدر ImageUser تصاویر من واقع شده اند مثلا a.jpg توی این فولدر هست.
حالا صفحهای که قراره تصویر رو نشون بده دقیقا توی روت قرار داره پس مسیری که باید به کنترل Image نسبت داده بشه میشه


AppData/ImageUser/a.jpg


و پیشنهاد من اینه که اگر تمامیه تصاویر در یک پوشه قرار دارن شما برای هر رکورد فقط نام تصویر رو ذخیره کن و بقیه مسیر رو ثابت بهش نسبت بده.

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

arsalansalar
چهارشنبه 04 اردیبهشت 1387, 14:45 عصر
جناب arsalansalar (http://barnamenevis.org/forum/member.php?u=46464) بهتره که شما یه شرحی از وضعیت root اعلام کنید.

بر اساس فرمایشت شما تو پستهای اول "C:\img\a.jpg" به نظر میاد شما درایو C رو root در نظر گرفته اید آیا این مسئله صحت داره؟!!!!!
یا مثلا آیا پوشه imageuser داخل پوشه appdata قرار داره.

من یه شرح فرضی از یه وضعیت فیزیکی میدم شما بر اساس همین امر وضعیت خودتو تشریح کن تا دوستان بررسی کنن و راه حل دقیق بدن.

با فرض داشتن یه روت که منظور پوشه ایه که پایه برنامه سایت شما توی اون قرار داره حالا داخل این فولدر ما یه AppData داریم و داخل اون یه ImageUser که توی فولدر ImageUser تصاویر من واقع شده اند مثلا a.jpg توی این فولدر هست.
حالا صفحهای که قراره تصویر رو نشون بده دقیقا توی روت قرار داره پس مسیری که باید به کنترل Image نسبت داده بشه میشه


AppData/ImageUser/a.jpg


و پیشنهاد من اینه که اگر تمامیه تصاویر در یک پوشه قرار دارن شما برای هر رکورد فقط نام تصویر رو ذخیره کن و بقیه مسیر رو ثابت بهش نسبت بده.

حالا با مثال بالا شما شرایط خودت رو توصیف کن که عکسها کجان و صفحه نمایش دهنده کجاست.
موفق باشید
با سلام
پوشه image user در کنار پوشه appdata است.
مشکل من دقیقا این است که فقط نام عکسها را ذخیره می کنم ولی قادر به دادن آدرس ثابت بر اساس کدهای که در پست اول نوشتم نیستم.

Alireza_Salehi
چهارشنبه 04 اردیبهشت 1387, 15:37 عصر
اولا کنترل Image در ASP.NET و کلا هر کنترل ASP.NET دیگری که آدرس قبول می کند، فقط به دوصورت آدرس را می پذیرند:
آدرس نسبی (Relative) : یعنی آدرس نسبت به ریشه سایت و بدون آدرس دامنه (این آدرس در زمان اجرا خود به خود توسط ASP.NET به آدرس مطلق تبدیل می شود)
مثلا:
~/App_Data/Images/img00.jpg
آدرس مطلق (Absolute) : یعنی آدرس کامل همراه با آدرس دامنه
مثلا:
http://localhost/mywebsite/App_Data/Images/img00.jpg

حالت سومی وجود ندارد، مثلا آدرس زیر معنی ندارد:

C:\App_Data\Images\img00.jpg
این آدرس به عنوان یک آدرس نامعتبر در نظر گرفته می شود و تصویر سمت چپ نشان داده می شود، و در صورتی که آدرس معتبر باشد ولی تصویر موجود نباشد یا اشتباهی در آدرس وجود داشته باشد تصویر سمت راست نشان داده می شود.(تصاویر ضمیمه را ببینید)
عیب آدرس مطلق هم این است که هر زمان سرور عوض شود باید همه آدرس ها را عوض کنید!

در وب سایت ها همه آدرس ها باید نسبی و نسبت به ریشه سایت ذخیره گردد،و این که چطور ریشه سایت را بدست آوریم در پست 12 گفتم.

در ضمن پوشه App_Data به دلایل امنیتی قابل استفاده نیست(البته می شود تغییرش داد).

حالا اگر با تمام این تفاسیر بازهم مشکل دارید به سوال های زیر دقیق پاسخ دهید تا مشکل را دقیق تر بررسی کنیم:
1. در دیتابیس دقیقا چه چیزی ذخیره می کنید؟
2. از چه کنترل Image ی استفاده کرده اید(HTML یا ASP.NET)؟
3.ایا به تفاوت آدرس دهی این دونوع کنترل دقت کرده اید(پست 12)؟
4. آیا قبل از نمایش یا بایدن شدن به کنترل تغییری در مقدار ذهیره شده در دیتابیس صورت می گیرد یا نه؟

arsalansalar
چهارشنبه 04 اردیبهشت 1387, 16:08 عصر
اولا کنترل Image در ASP.NET و کلا هر کنترل ASP.NET دیگری که آدرس قبول می کند، فقط به دوصورت آدرس را می پذیرند:
آدرس نسبی (Relative) : یعنی آدرس نسبت به ریشه سایت و بدون آدرس دامنه (این آدرس در زمان اجرا خود به خود توسط ASP.NET به آدرس مطلق تبدیل می شود)
مثلا:
~/App_Data/Images/img00.jpg
آدرس مطلق (Absolute) : یعنی آدرس کامل همراه با آدرس دامنه
مثلا:
http://localhost/mywebsite/App_Data/Images/img00.jpg

حالت سومی وجود ندارد، مثلا آدرس زیر معنی ندارد:

C:\App_Data\Images\img00.jpg
این آدرس به عنوان یک آدرس نامعتبر در نظر گرفته می شود و تصویر سمت چپ نشان داده می شود، و در صورتی که آدرس معتبر باشد ولی تصویر موجود نباشد یا اشتباهی در آدرس وجود داشته باشد تصویر سمت راست نشان داده می شود.(تصاویر ضمیمه را ببینید)
عیب آدرس مطلق هم این است که هر زمان سرور عوض شود باید همه آدرس ها را عوض کنید!

در وب سایت ها همه آدرس ها باید نسبی و نسبت به ریشه سایت ذخیره گردد،و این که چطور ریشه سایت را بدست آوریم در پست 12 گفتم.

در ضمن پوشه App_Data به دلایل امنیتی قابل استفاده نیست(البته می شود تغییرش داد).

حالا اگر با تمام این تفاسیر بازهم مشکل دارید به سوال های زیر دقیق پاسخ دهید تا مشکل را دقیق تر بررسی کنیم:
1. در دیتابیس دقیقا چه چیزی ذخیره می کنید؟
2. از چه کنترل Image ی استفاده کرده اید(HTML یا ASP.NET)؟
3.ایا به تفاوت آدرس دهی این دونوع کنترل دقت کرده اید(پست 12)؟
4. آیا قبل از نمایش یا بایدن شدن به کنترل تغییری در مقدار ذهیره شده در دیتابیس صورت می گیرد یا نه؟
با سلام.
1)فقط نام عکس با پسوند را ذخیره می کنم.
2)asp.net
3)بله
4)خیر

twelve
چهارشنبه 04 اردیبهشت 1387, 16:39 عصر
سوالی که برای من پیش اومده اینه که چه اصراری است که arsalansalar (http://barnamenevis.org/forum/member.php?u=46464) عکس ها رو در پوشه App_Data ذخیره کنند؟!
به غیر از راهکارهای پیشنهادی دوستان هم که دیگه راه دیگه ای برای نسبت دادن مسیر عکس به کنترل ها وجود ندارد ، توضیحات arsp_2004 کاملا واضحه ، احتمالا شما در جایی اشتباه می کنید ، که من فکر میکنم اشتباه شما در زمان ادرس دهی به عکس است که من به شخصه برای این منظور به صورت زیر عمل می کنم و هیچ مشکلی هم پیش نمیاد (به فرض اینکه صفحه نمایش دهنده عکس در روت سایت و عکس ها در پوشه ای به نام Images که در روت سایت قرار دارد باشد و در دیتابیس تنها نام عکس ذخیره شده باشد از ~ هم استفاده نمیکنم. )


<asp:Image id="Image1" Runat= "Server" ImageUrl = "Images/'<%# Container.DataItem("ImageName") %>' "></asp:Image>

Alireza_Salehi
چهارشنبه 04 اردیبهشت 1387, 17:31 عصر
با توجه به جواب سوال 1 و 4 مطمئنید اصلا مشکلی هست؟

جالبه که فقط نام و پسوند عکس در دیتابیس ذخیره می شود و موقع نمایش هم هیچ چیزی به این مقدار اضافه نمی شود تا آدرس تولید شود!؟ حالا این آدرس های غلط از کجا در می آید معلوم نیست!

FAROKHNEW
شنبه 28 اردیبهشت 1387, 14:19 عصر
با عرض سلام من یک مشکلی دارم در وب سایت من عکس خو ب نمایش داده می شه ولی وقتی عکسی را حذف یا تغییر می دهم عکس قبلی نمایش داده می شود چطور می شه عکس قبلی را از حافظه کش حذف نمود

raravaice
یک شنبه 29 اردیبهشت 1387, 10:33 صبح
با عرض سلام من یک مشکلی دارم در وب سایت من عکس خو ب نمایش داده می شه ولی وقتی عکسی را حذف یا تغییر می دهم عکس قبلی نمایش داده می شود چطور می شه عکس قبلی را از حافظه کش حذف نمود

Ctrl+F5

موفق باشید

FAROKHNEW
سه شنبه 31 اردیبهشت 1387, 10:39 صبح
می دونم با ctrl+F5 صفحه refresh می شه چطور با کد نویسی صفحه رو از سرور refresh کنم

raravaice
سه شنبه 31 اردیبهشت 1387, 10:46 صبح
از سرور نمیتونی رفرش کنی.

یا از ابتدا نزار Cache بشه که نیاز به رفرش باشه:


context.Response.Cache.SetExpires(Now.Date.AddDays (-1))


تا با جاوا اسکریپت رفرش کن:



document.location.reload();


موفق باشید