Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Определение размера файла в интернете Добавлено: 11.10.10 01:58  

Автор вопроса:  macolor | ICQ: 7556157 
Всем привет. Такая ситуация: необходимо узнать размер загружаемого файла в интернете. Нужно это для progress bar'a. В VB .net новичок. Нашёл несколько примеров, но не один либо не работает, либо немогу применить. И ещё одна небольшая сложность: Link к файлу не совсем прямой, тоесть ссылка в программе указывает на http://test.ru/123.mp3, а на самом деле переадресует и качает, например с http://test.ru/edw44t5twtgw/123.mp3 - эту проблему я решил использованием "Net.WebClient".
Вообщем такой небольшой код:

...
Dim wc As New Net.WebClient
Dim fs As New IO.FileStream("c:\temp.tmp", IO.FileMode.Create)
Dim bw As New IO.BinaryWriter(fs)
Dim a1() As Byte
'здесь желательно нужно вставить код получения размера файла
a1 = wc.DownloadData("http://test.ru/123.mp3")
bw.Write(a1)
bw.Close()
fs.Close()
...

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #1 Добавлено: 11.10.10 09:32
WC.ResponseHeaders(Http.Net.WebResponseHeaders.ContentLength)
как то так %)

Ответить

Номер ответа: 2
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #2 Добавлено: 11.10.10 09:32
Http.Net.WebResponseHeaders -> Net.HttpResponseHeaders

Ответить

Номер ответа: 3
Автор ответа:
 macolor



ICQ: 7556157 

Вопросов: 2
Ответов: 2
 Профиль | | #3 Добавлено: 11.10.10 18:22
wc.ResponseHeaders(Net.HttpResponseHeader.ContentLength) - наверное это) и всё равно не пойму где там указать ссылку

Ответить

Номер ответа: 4
Автор ответа:
 Vlad



Вопросов: 6
Ответов: 22
 Профиль | | #4 Добавлено: 24.11.10 12:40
а какую ссылку ты хочешь там указать, если на сам файл, то этого делать не нужно, вернее нужно но не здесь
вот так выполняется запрос:
  1.  
  2. Dim myHttpWebRequest As HttpWebRequest = HttpWebRequest.Create(Url)
  3. myHttpWebRequest.Proxy = New WebProxy("127.0.0.1", 8888) 'можно прокси и не указывать
  4. myHttpWebRequest.UserAgent = "Mozila/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2;"
  5. myHttpWebRequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"
  6. myHttpWebRequest.Headers.Add("Accept-Language", "ru")
  7. myHttpWebRequest.ContentType = "audio/mpeg" 'тут нужно указать свой MIME тип, сейчас стоит для mp3
  8.  
  9. Dim myHttpWebResponse As HttpWebResponse = myHttpWebRequest.GetResponse()
  10.  
  11. ProgressBar1.Maximum = myHttpWebResponse.ContentLength 'это и есть длина содержимого, только не забывай
  12. 'об ошибке прогресс бар использует тип Integer а тебе myHttpWebResponse.ContentLength вернет тип Long
  13. 'для файлов меньше 32 К можеш и так использовать ну а вообще правильно было все это перевести в %
  14. 'а дальше обычная математика
  15. ProgressBar1.Maximum = 100 '% т.е. myHttpWebResponse.ContentLength
  16.  
  17. Do
  18.  Application.DoEvents()
  19.  ProgressBar1.Value = CInt(myHttpWebRequest.GetResponse.ContentLength * 100 \ myHttpWebResponse.ContentLength)
  20. Loop While myHttpWebRequest.GetResponse.ContentLength < ws.ContentLength
  21.  
  22. Dim str As Stream = myHttpWebResponse.GetResponseStream()
  23. Dim inBuf(myHttpWebResponse.ContentLength) As Byte
  24. Dim bytesToRead As Long = CInt(inBuf.Length)
  25. Dim bytesRead As Long = 0
  26.  
  27. While bytesToRead > 0
  28.   Dim n As Integer = str.Read(inBuf, bytesRead, bytesToRead)
  29.   If n = 0 Then Exit While
  30.   bytesRead += n
  31.   bytesToRead -= n
  32. End While
  33.  
  34. Dim fstr As New FileStream("temp.mp3", FileMode.OpenOrCreate, FileAccess.Write)
  35. fstr.Write(inBuf, 0, bytesRead)
  36. str.Close()
  37. fstr.Dispose()
  38. fstr.Close()
  39.  



где то примерно так, но это не рабочий вариант, т.к. сам говориш что там редирект стоит, поэтому сначала проанализируй сам трафик вероятнее всего там еще нужно принимать куки перед моим вариантом и потом уже в моем варианте их передавать

Ответить

Номер ответа: 5
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #5 Добавлено: 24.11.10 14:14
HttpWebRequest это зачем? WebClient то проще, не так ли?

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 24.11.10 17:31
Например, чтоб использовать возможности которых нет в WebClient?

Ответить

Номер ответа: 7
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #7 Добавлено: 24.11.10 19:20
Не вижу в вышеприведенном коде использования тех возможностей, который нету в WebClient

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам