Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наличие картинки на www.mysite.com/test.jpg 
V
    Опции темы
alexburzak
  Дата 13.10.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 12.3.2007
Где: Hadera

Репутация: нет
Всего: 1



Задача: нужно проверить наличие картинки на www.mysite.com/test.jpg
Написал вот так:
Код

                            Dim wrRequest As WebRequest
                            wrRequest = WebRequest.Create("http://www.mysite.com/test.jpg")
                            Dim wrResponse As WebResponse
                            wrResponse = wrRequest.GetResponse()

Проблемма, на каком то этапе приходится ждать по полчаса ответа от сервера(проверяется это в цикле, то есть далеко ни одна картинка) и конечно получаю time out. smile 
Что можно сделать? 
Как можно проверить наличие картинки?
PM   Вверх
Exception
Дата 14.10.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Поставь маленький Timeout и лови WebException.
PM   Вверх
alexburzak
  Дата 14.10.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 12.3.2007
Где: Hadera

Репутация: нет
Всего: 1



Цитата(Exception @ 14.10.2007,  14:01)
Поставь маленький Timeout и лови WebException.

 smile 
Но все равно это не выход, так как тайм аут случается скажем через 1 секунду, а у меня есть к примеру 20 картинок, то еть 20 секунд. Понятно что пользователь не будет ждать.
Нужна схема, что-то вроде зарузить 20 картинок сразу, куда-нибудь в кеш. А затем вытаскивать по одной и смотреть есть она или нет.
Плиз помогите мозгами. Есть решение на такую проблемму?
PM   Вверх
Exception
Дата 15.10.2007, 03:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Ну так и загружай их заранее описанным выше методом, а потом показывай из кэша.. В чём проблема-то?
PM   Вверх
alexburzak
  Дата 15.10.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 12.3.2007
Где: Hadera

Репутация: нет
Всего: 1



Да нет проблем, но  smile 
так как у меня все равно замкнутый круг, начинаю загружать заранее и по преженему получаю тайм аут. Чуствую, что где то в моей логике баг...  smile 
Можешь помочь примером?
PM   Вверх
alexburzak
  Дата 21.10.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 12.3.2007
Где: Hadera

Репутация: нет
Всего: 1



 smile 
Есть решение, но пока я это решение не сделал.
Вкратце нужно поставить обработчик событий.
        Inherits IHttpHandler
Если разберусь, то напишу.
PM   Вверх
alexburzak
  Дата 21.10.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 12.3.2007
Где: Hadera

Репутация: нет
Всего: 1



 smile вообщем любителям чужого кода посвящается:
Код

<%@ WebHandler Language="VB" Class="ImageProxy" %>
Public Class ImageProxy : Implements IHttpHandler
    Private Shared RemoteImageDirectory As String = "http://www.xxx.com/Img/"
    Private Shared DefaultImageFile As String = "~/img/NoPict/400X400.jpg"
    '??????????????????????????????????? String !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Private Shared CacheDuration As TimeSpan = New TimeSpan(0, 5, 0) ' 5 minutes
    Private Shared MaxCachableImageSize As Integer = 51200
    '--------------------------------------------------------------------------------------------------------
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return True
        End Get
    End Property
    '--------------------------------------------------------------------------------------------------------
    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        context.Response.ContentType = "image/jpeg"
        Dim imageBuffer() As Byte = Nothing
        Dim image As String
        image = context.Request.Params("img")
        If (image <> "") Then
            imageBuffer = GetRemoteImage(context, image)
        Else
            imageBuffer = GetDefaultImage(context)
        End If
        context.Response.BinaryWrite(imageBuffer)
    End Sub
    '--------------------------------------------------------------------------------------------------------
    Private Function GetDefaultImage(ByVal context As HttpContext) As Byte()
        Dim defaultImage As FileInfo = New FileInfo(context.Server.MapPath(DefaultImageFile))
        Dim stream As FileStream = defaultImage.OpenRead
        Dim imageBuffer() As Byte = New Byte((defaultImage.Length) - 1) {}
        stream.Read(imageBuffer, 0, imageBuffer.Length)
        Return imageBuffer
    End Function
    '--------------------------------------------------------------------------------------------------------
    Private Sub CacheRemoteImage(ByVal context As HttpContext, ByVal remoteImageUrl As String, ByVal image() As Byte)
        If (image.Length < MaxCachableImageSize) Then
            context.Cache.Add(remoteImageUrl, image, Nothing, (DateTime.Now + CacheDuration), Cache.NoSlidingExpiration, CacheItemPriority.Default, Nothing)
        End If
    End Sub
    '--------------------------------------------------------------------------------------------------------
    Private Function GetRemoteImage(ByVal context As HttpContext, ByVal imageName As String) As Byte()
        Dim imageBuffer() As Byte = Nothing
        Dim remoteImageUrl As String = (RemoteImageDirectory + imageName)
        Dim cachedImage As Object = context.Cache(remoteImageUrl)
        If (Not (cachedImage) Is Nothing) Then
            imageBuffer = CType(cachedImage, Byte())
        Else
            Try
                Dim request As WebRequest = WebRequest.Create(remoteImageUrl)
                Dim response As WebResponse = request.GetResponse
                If (response.ContentType = "image/jpeg") Then
                    Dim stream As Stream = response.GetResponseStream
                    imageBuffer = New Byte((response.ContentLength) - 1) {}
                    stream.Read(imageBuffer, 0, imageBuffer.Length)
                Else
                    imageBuffer = GetDefaultImage(context)
                End If
            Catch ex As System.Exception
                imageBuffer = GetDefaultImage(context)
            End Try
            CacheRemoteImage(context, remoteImageUrl, imageBuffer)
        End If
        Return imageBuffer
    End Function
End Class

В web.config:
Код

    <system.web>
        <httpHandlers>
            <add type="ImageProxy" verb="GET" path="imageproxy"/>
        </httpHandlers>
    </system.web>

И если вым не в падлу поставить IIS 6.0 (читай винда 2003), то это должно работать.
Сори, но у меня не было такой возможности.  smile 
PM   Вверх
alexburzak
  Дата 22.10.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 12.3.2007
Где: Hadera

Репутация: нет
Всего: 1



 smile 
Все таки сделал.
web.config снес нафиг(ту строчку)
А вызов handler'а делаю вот так:
<img src="ImageProxy.ashx?img=mupath/11169s.jpg&def=~/img/NoPict/130X130.gif" />
 smile 
Для последующих по моим стопам - будут вопросы в личку или на почту милости просим.
 smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0859 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.