Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
В программе у меня стоит:if (Image1.ImageUrl[0] == '~') { Image1.ImageUrl= Server.MapPath(Image1.ImageUrl.Substring(2)); } где Image1 - это asp:Image При его описании я задалImageUrl="~/App_Data/RegisteredPhoto.jpg" На сервере в папке App_Data фото с названиемRegisteredPhoto.jpg лежит на месте. В автономе всё нормально показывается, а через сервер фотографии не видать. В чем может быть дело?, - подскажите, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 22:42 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Зачем хранить фотографии в папке App_Data? Это системная директория для файлов данных. Лучше создайте директорию Images и храните файлы там. Пределение Url к файлу - метод ResolveUrl, а не MapPath (определение серерного пути). Используйте ResolveUrl!-- Гайдар Магдануров E-Mail | Блог | Сайт Difficult I do now, impossible will take a while... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2006, 22:43 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Большое спасибо за вразумление. Теперь насчет папки App_Data. Дело в том, что у меня фотографии ПОЛУЧАЮТСЯ в процессе деятельности, а именно - они извлекаются из моей БД. Извлекаю, чтобы показать на экране. А извлечь мне дозволено (как я понимаю) только в папку App_Data, - иначе получу прерывание защиты безопасности. Как тут быть? Сейчас буду пробовать ResolveUrl. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2006, 23:20 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
В программе стоит: Image1.ImageUrl= ResolveUrl(Image1.ImageUrl); Response.Write(Image1.ImageUrl); В результате сверху экрана появляется: /App_Data/RegisteredPhoto.jpg и рамка - пустая (фото в ней нет). Попробую положить фото в другую папку (Images). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2006, 23:40 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Для чего вообще писать извлеченную фотку на диск? Все ж наоборот ищут как любыми способами избавиться от отдельных файлов на диске. пиши ее из SQL прямо в поток браузера. Способов миллион - самый ходовой рецепт тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2006, 23:57 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Из "ходового рецепта" мне удалось пока извлечь только следующую подсказку: Response.ContentType= "image/jpeg"; System.IO.MemoryStream ms= newSystem.IO.MemoryStream(); bmMap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); ms.WriteTo(Response.OutputStream); Предположим, я действительно могу извлечь фото в "воздух" (или на диск в App_Data временно). Теперь мне нужно уметь содержимое подсунуть в Image1, которое имеет тип asp:Image Потому что мне незачем просто рисовать это фото на экране где попало, а Image1 размещен в нужном мне месте. Подскажите поконкретнее, если кто знает, как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2006, 00:17 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
В asp:Image в свойство ImageUrl установишь путь к своему HttpHandler (или aspx, в зависимости от того как ты реализовал), который "извлекает картинку в воздух". Что-то вроде такого: Image1.ImageUrl = ResolveUrl("~/image.aspx?id=" + imageId); ( Блог программиста ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2006, 00:30 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
В asp:Image в свойство ImageUrl установишь путь к своему HttpHandler (или aspx, в зависимости от того как ты реализовал), который "извлекает картинку в воздух". Что-то вроде такого: Image1.ImageUrl = ResolveUrl("~/image.aspx?id=" + imageId); ( Блог программиста ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2006, 00:32 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2006, 00:34 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Под "воздухом" я понимал "оперативку", оперативную память (скажем, string или массив byte[]). Мне действительно нетрудно из своей БД побайтно считать фотографию. И теперь это надо загрузить в HttpHandler, как я понимаю. Но это я пока себе смутно представляю, так как не знаю этого HttpHandler ... Дорогой manovcih, я Вашего "~/image.aspx?id=" + imageId пока совсем не понимаю. Я что: должен завести страничку image.aspx ? Это несложно. И что потом дальше делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2006, 01:23 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Статья Отображение картинки из БД напрямую – создание своего HttpHandler поможет разобраться с HttpHandler'ом. Если назвать handler так же как и в этой статье (photo.aspx), то что бы загрузить картинку в браузер надо будет набрать адрес: http://имясайта/photo.aspx?id=[тут_id_записи_с_нужной_картинкой_в_базе] ( Блог программиста ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2006, 01:54 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Уважаемый manovcih, я прочитал Вашу содержательную статью про HpptHandler, и думаю, что использование Handler'a - это очень перспективный путь. Но пока не могу на него решиться, поскольку фото - это вроде бы не такая уж сложная штука. Расскажу чего я пока достиг. Для этого привожу кусок своей программы: System.IO.MemoryStream ms= new System.IO.MemoryStream(); string fnam; fnam= Server.MapPath(Image1.ImageUrl); ms= fyle.All(fnam); // Моя команда, означающая считывание // содержимого файла в память Response.ContentType= "image/jpeg"; ms.WriteTo(Response.OutputStream); - и вверху страницы появляется фотография! Но вся остальная часть страницы зато при это исчезает... Напоминаю всю сложность момента: если бы это была статическая фотка и сидела бы в Images, то никаких бы проблем тут не было. Но фото возникло динамически, и лежит в App_Data. А показывать из этой папки фотографии студия почему-то отказывается (хотя при этом благополучно помещает их туда по FileUpload'у). Зная местонахождение фотографии (a ImageUrl вверху как раз туда и указывает), я считываю содержимое файла-фоты в память. И потом пытаюсь эту "фоту в памяти" показать на экране. Но выходит неуклюже. И только в этом сейчас вся проблема. Итак, как можно КУЛЬТУРНО отобразить на странице имеющуюся в памяти фотографию? (чтобы она оказалась на своем месте). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2006, 21:25 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Кстати, вместо трех строк приведенного выше фрагмента программы можно было написать просто: Response.TransmitFile(fnam); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2006, 22:08 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Слуш, по-хорошему, хандлеры тебе не нужны. Это АЛЬТЕРНАТИВНЫЙ путь, тому, что я тебе сказал. Вся твоя проблема в том, что ты не можешь понять эту фразу. Ничего у тебя не получится сделать дальше, пока не поймешь нижеследующую фразу. И код, на который я тебе давал ссылку. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2006, 23:22 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Я проштудировал статью http://www.aspnetmania.com/Articles/Article/20.html и даже попробовал реализовать. 1) Во-первых, студия меня обругала за код <httpHandlers> <add verb="*" path="photo.aspx" type="PictureHandler.PictureHandler,PictureHandler" /> </httpHandlers> который я вставил в web.config 2) И второе препятствие, которое я вижу, заключается в том, что я не использую (может быть, пока) SQL, а там во много всё держится на использовании SQL. Я этого монстра стараюсь избегать всеми силами... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 00:05 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
автор1) Во-первых, студия меня обругала за код <httpHandlers> <add verb="*" path="photo.aspx" type="PictureHandler.PictureHandler,PictureHandler" /> </httpHandlers> который я вставил в web.config свой класс по созданию хэндлера нужно компилировать (обязательно) - из командной строки студии доходишь до класса и пишешь vbc /target:library имяКласса.vb (для vb.net) потом включаешь эту .dll в проект и всё будет сладенько ;) автор 2) И второе препятствие, которое я вижу, заключается в том, что я не использую (может быть, пока) SQL, а там во много всё держится на использовании SQL. Я этого монстра стараюсь избегать всеми силами... так ведь где то ты же хранишь фотки (какая то БД) вот из неё и выбирай только не на диск а сразу в респонс.оутпутстринг ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 00:42 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
кстати, тут так часто говорят о прелестях самописного HttpHandler - что я тоже решил попробовать - классная штука НО есть один вопрос: как из него обратиться к сессионной переменной (где можно прочесть "ПРО ЭТО" ?) так запросто context.Session("bla-bla-bla") не выходит, а очень нужно... КАК БЫТЬ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 00:53 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
На словацком сайте www.qsh.com доступ к фотоматериалам сделан так: 1) они в состав WebSite включают странный модуль Handler.ashx, который не имеет своего .cs-двойника 2) я привожу полностью его текст: <%@ WebHandler Language="C#" Class="Handler" %> using System; using System.IO; using System.Web; public class Handler : IHttpHandler { public bool IsReusable { get { return true; } } public void ProcessRequest (HttpContext context) { // Set up the response settings context.Response.ContentType = "image/jpeg"; context.Response.Cache.SetCacheability(HttpCacheability.Public); context.Response.BufferOutput = false; // Setup the Size Parameter PhotoSize size; switch (context.Request.QueryString["Size"]) { case "S": size = PhotoSize.Small; break; case "M": size = PhotoSize.Medium; break; case "L": size = PhotoSize.Large; break; default: size = PhotoSize.Original; break; } // Setup the PhotoID Parameter Int32 id = -1; Stream stream = null; if (context.Request.QueryString["PhotoID"] != null && context.Request.QueryString["PhotoID"] != "") { id = Convert.ToInt32(context.Request.QueryString["PhotoID"]); stream = PhotoManager.GetPhoto(id, size); } else { id = Convert.ToInt32(context.Request.QueryString["AlbumID"]); stream = PhotoManager.GetFirstPhoto(id, size); } // Get the photo from the database, if nothing is returned, get the default "placeholder" photo if (stream == null) stream = PhotoManager.GetPhoto(size); // Write image stream to the response stream const int buffersize = 1024 * 16; byte[] buffer = new byte[buffersize]; int count = stream.Read(buffer, 0, buffersize); while (count > 0) { context.Response.OutputStream.Write(buffer, 0, count); count = stream.Read(buffer, 0, buffersize); } } } Ничего web.config'e они не меняют. 3) в тексте Default.aspx у них есть кусок: <td><a href='Details.aspx?AlbumID=<%# Eval("AlbumID") %>&Page=<%# Container.DataItemIndex %>'> <img src="Handler.ashx?PhotoID=<%# Eval("PhotoID") %>&Size=M" class="photo_198" style="border:4px solid white" alt='Photo Number <%# Eval("PhotoID") %>' /></a></td> <td class="mid--x"></td> 4) и этого оказывается достаточно, чтобы на странице действительно появлялось фото. Если кто-нибудь что-то из этого понял, объясните мне пожалуйста этот их "словацкий" фокус. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 17:43 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Файл handler.ashx на диске существует? Трюк с web.config нужен для того что бы не создавать такой файл на диске. Можно ничего не добавлять web.config и просто создать файл на диске, который обработает запрос за картинкой, аналогично как любой другой запрос за страницей обрабатывается соответствующим aspx файлом. В "словацком" случае такой файл - handler.ashx. P.S. для web-сервера запрос за страницей и запрос за картинкой принципиально разницы не имеют. Вся разница только в content-type. Просто, при на запросе за страницей браузеру отсылается HTML разметка, а при запросе за картинкой браузеру отсылаются байты картинки. ( Блог программиста ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 18:15 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
главное не волнуйся ;) от этого поднимается давление и пропадает желание... создай страничку .aspx и туда в пагелоад пропиши код Код: plaintext 1. 2. 3. 4. 5. на странице, в которой ты хочешь получить картинку пишешь один единственный тэг Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 18:17 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
С файлом handler.ashx (в составе WebSite) приятно хотя бы уже то, что транслятор не жалуется, когда в src ссылаешься на него... Постараюсь проделать всё по рекомендации... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 20:49 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Ух-ты! Уважаемый vladgriq, ПОЛУЧИЛОСЬ. Огромный успех. Проверил и в автономе и, главное, на сервере. Прелесть этого метода в том, что он показывает фото (картинки) из папки App_Data, что почему-то отказывается делать Image. Подвожу итоги: 1) в WebSite надо создать текст photo.aspx с таким содержанием: protected void Page_Load(object sender, EventArgs e) { System.IO.MemoryStream ms= new System.IO.MemoryStream(); string fnam; fnam= Server.MapPath(Image1.ImageUrl); ms= fyle.All(fnam); // Моя команда, означающая считывание // содержимого файла в память Response.Clear(); Response.ContentType= "image/jpeg"; ms.WriteTo(Response.OutputStream); //this.Response.TransmitFile(fnam); } <body> <form id="form1" runat="server"> <div> <asp:Image ID="Image1" runat="server" Width="206px" ImageUrl="~/App_Data/RegisteredPhoto.jpg" /> </div> </form> </body> смысл здесь в том, что фото оказывается сначала в памяти, а затем на специально выделенной для него чистой странице. 2) в нужном месте программы вставляем: <img alt="newphoto" src="photo.aspx" /> 3) И тогда при выполнении программы в этом месте покажется содержимое фотографии. 4) осталось только сделать параметр (скажем, через Session), который бы в photo.aspx настраивал местоположение фото. Повторяю, тут вся борьба была за то, чтобы отображался материал динамического характера, т.е. из App_Data. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 21:29 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Вношу некоторые корректировки в размышления ;) страница photo.aspx вообще не в чём не нуждается - там даже лишнее уже есть см. классический пример от MS Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. автор4) осталось только сделать параметр (скажем, через Session), который бы в photo.aspx настраивал местоположение фото. туда, как правило передаются параметры для извлечения различных фото - потому как страница на все фотки одна (как правило - значения передаются в строке запроса) и какая фотка будет показана при помощи эой страницы зависит как раз от параметра который мы ей передадим... а местоположение фотки на странице задаётся в самой основной странице как ты и написал Код: plaintext 1. могу огорчить (или сильно обрадовать ;) - при таком подходе инфа-файл будет считываться из любой папки на сервере (она может быть вообще на др. физическом диске и незамаплена на IIS) - единственное, надо дать права на чтение пользователю из под которого работает IIS - но думаю об этом в др. теме - сейчас это не главное ;) P.S. думаю картина происходящего стала ещё яснее?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 22:46 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
1) Если нетрудно, укажите откуда Вы взяли "классический пример от MS". Я имею в виду, что может быть там рядом я найду "перевод" на привычный мне С-Sharp и получше разберусь в ентом деле. 2) От имеющихся возможностей я НЕ огорчаюсь. Я огорчаюсь, когда их нет. (Тем более в случае надуманного нежелания MS показывать из App_Data!). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 23:07 |
|
||
|
Почему не-в-автономе не показывается фотография?
|
|||
|---|---|---|---|
|
#18+
Интересно: я стал писать <img id="imgPhotoRegistered" runat="server" src= и в этот момент студия САМА мне предложила вставить туда Handler.ashx (который у меня остался в Web-проекте). Это означает, что суффикс "ashx" какой-то особенный. Может быть он как раз и предназначен для показа изображений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 23:34 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=33960459&tid=1389854]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 336ms |

| 0 / 0 |
