PDA

View Full Version : سوال: دانلود یک فایل از اینترنت



rezapassword
دوشنبه 18 آذر 1387, 10:20 صبح
سلام دوستان
میخوام با زدن یک دکمه یک فایل از اینترنت دانلود بشه با ادرسی که توی تکس باکس 2 هست ( تا اینجا رو بلدم ) و همیچنین با میزان دانلود یک پروگرس بار هم پر بشه
لطفا کد کامل رو بزارید
ممنون

__H2__
سه شنبه 19 آذر 1387, 22:02 عصر
سلام
شما میتوانید stream دانلود را بدست بیاورید و خودتان دستی اطلاعات را از آن بخوانید.
در این صورت به راحتی میتوانید از روند پیشرفت مطلع شوید.

مثلاً کدی شبیه این نمونه:
(کد را تست نکردم ولی فکر نکنم ایرادی داشته باشد، خودتان میتوانید به عنوان نمونه در نظر بگیریدش و برای کار خود به طور مناسب و بهتر اصلاحش کنید.)


Const BUFFERSIZE As Integer = 16 * 1024
Dim buffer(BUFFERSIZE - 1) As Byte
Dim iRead As Integer

Using _
res As System.Net.WebResponse = System.Net.WebRequest.Create(url).GetResponse, _
strmread As System.IO.Stream = res.GetResponseStream, _
strmwrite As New System.IO.FileStream("C:\file.bin", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write)

Do
iRead = strmread.Read(buffer, 0, BUFFERSIZE)

If (iRead <= 0) Then Exit Do
strmwrite.Write(buffer, 0, iRead)

If (iRead <> BUFFERSIZE) Then Exit Do
Loop
End Using

mahmood744
چهارشنبه 20 آذر 1387, 17:23 عصر
این هم یک تابع بسیار عالی که خودم در برنامم استفاده کردم و 100 درصد کار می کنه



Function DownloadFile(ByVal sURL As String, ByVal InputFile As String, ByVal OutputFile As String, ByVal pProgress As ProgressBar, ByVal FileSizeLabel As Label) As Boolean
'Dim wRemote As System.Net.HttpWebRequest
FileSizeLabel.Text = "...در حال اتصال به سایت می باشد لطفا چند لحظه صبر کنید"
Dim URLReq As HttpWebRequest
Dim URLRes As HttpWebResponse
Dim bBuffer(999) As Byte
Dim iBytesRead As Integer
Dim FileStreamer As New FileStream(OutputFile, FileMode.Create)
Application.DoEvents()
Try
pProgress.Value = 0

URLReq = HttpWebRequest.Create(sURL & InputFile)
URLReq.Method = "GET" ' "POST"
URLReq.AllowAutoRedirect = True
URLReq.AuthenticationLevel = Net.Security.AuthenticationLevel.MutualAuthRequest ed
Application.DoEvents()
URLRes = URLReq.GetResponse
Application.DoEvents()
' WriteToLog("log.txt", "Downloading " & Filename & "...")
Dim IncomingData As Stream = URLReq.GetResponse.GetResponseStream
pProgress.Maximum = URLRes.ContentLength / 100
Do
iBytesRead = IncomingData.Read(bBuffer, 0, 1000)
FileStreamer.Write(bBuffer, 0, iBytesRead)
If pProgress.Value + iBytesRead <= pProgress.Maximum And pProgress.Value < (pProgress.Maximum - (iBytesRead / 100)) Then
pProgress.Value += (iBytesRead / 100)
Else
pProgress.Value = pProgress.Maximum
End If
FileSizeLabel.Text = "Downloading " & CInt(pProgress.Value / 10.24) & "kb of " & CInt(URLRes.ContentLength / 1024) & "kb"
Application.DoEvents()
Loop Until iBytesRead = 0
pProgress.Value = pProgress.Maximum
IncomingData.Close()
FileStreamer.Close()
DownloadFile = True

Catch
'WriteToLog("log.txt", "ERRROR " & Err.Description & ", " & Err.Number)
MsgBox(Err.Description + Chr(13) + sURL + InputFile, MsgBoxStyle.OkOnly + MsgBoxStyle.Critical)
FileSizeLabel.Text = sURL + InputFile + " خطا در بروز رسانی "
FileStreamer.Close()
If File.Exists(OutputFile) Then Kill(OutputFile)
DownloadFile = False
End Try
End Function