Mahlzeit,
habe ein komisches Problem mit dem MD5CryptoServiceProvider.ComputeHash und IO.Streams.
Ich lade mittels Net.HttpWebRequest Datein von einem Webserver herunter und hashe den Inhalt. Allerdings ist nach dem Aufruf von ComputeHash der Stream leer. Der Dateiname erhält den korrekten Hash. Die Dateien sind jedoch dann leer.
Wenn ich Computehash weglasse, hat der Stream den korrekten Inhalt und die Dateien werden gespeichert,
Selbst wenn ich einen neuen Stream erstelle und den hashe, dann ist der originale Stream auch leer. z.B:
Das Problem liegt in Zeile 53. Jemand ne Idee?
habe ein komisches Problem mit dem MD5CryptoServiceProvider.ComputeHash und IO.Streams.
Ich lade mittels Net.HttpWebRequest Datein von einem Webserver herunter und hashe den Inhalt. Allerdings ist nach dem Aufruf von ComputeHash der Stream leer. Der Dateiname erhält den korrekten Hash. Die Dateien sind jedoch dann leer.
Wenn ich Computehash weglasse, hat der Stream den korrekten Inhalt und die Dateien werden gespeichert,
Selbst wenn ich einen neuen Stream erstelle und den hashe, dann ist der originale Stream auch leer. z.B:
Das Problem liegt in Zeile 53. Jemand ne Idee?
VB.NET-Quellcode
- Imports System.IO
- Imports System.Net
- Imports System.Security.Cryptography
- Imports System.Text
- Imports System.Threading
- Imports System.Threading.Tasks
- Module Module1
- Dim mylinks() As String
- Dim mytask() As Task
- Dim md5() As MD5CryptoServiceProvider
- Dim myrow As String = "http://server.de/bild1.jpg,http://server.de/bild2.jpg,http://server.de/bild3.jpg ..... bis bild16.jpg"
- Sub Main()
- Try
- mylinks = Split(myrow, ",")
- ReDim mytask(mylinks.Count)
- ReDim md5(mylinks.Count)
- For i As Integer = 0 To mylinks.Count - 1
- Console.Out.WriteLineAsync(mylinks(i))
- mytask(i) = Task.Run(Sub() LoadImageFromUrl(mylinks(i), i.ToString))
- mytask(i).Wait()
- Next
- Console.ReadKey()
- Catch ex As Exception
- Console.Out.WriteLineAsync(ex.Message.ToString)
- Console.ReadKey()
- End Try
- End Sub
- Public Function AcceptAllCertifications(ByVal sender As Object, ByVal certification As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
- Return True
- End Function
- Public Sub LoadImageFromUrl(ByRef url As String, mycount As String)
- Try
- md5(mycount) = New MD5CryptoServiceProvider
- Dim request As Net.HttpWebRequest = DirectCast(Net.HttpWebRequest.Create(url), Net.HttpWebRequest)
- Dim response As Net.HttpWebResponse = DirectCast(request.GetResponse, Net.HttpWebResponse)
- Dim responseStream As IO.Stream = response.GetResponseStream()
- Dim data As Byte() = md5(mycount).ComputeHash(responseStream)
- Dim sBuilder As New StringBuilder()
- Dim i As Integer
- For i = 0 To data.Length - 1
- sBuilder.Append(data(i).ToString("x2"))
- Next i
- Dim localFile As String = sBuilder.ToString & "-" & mycount & ".jpg"
- Dim fs As New IO.FileStream(localFile, FileMode.Create, FileAccess.Write)
- Dim buffer(2047) As Byte
- Dim read As Integer
- Do
- read = responseStream.Read(buffer, 0, buffer.Length)
- fs.Write(buffer, 0, read)
- Loop Until read = 0
- responseStream.Close()
- fs.Flush()
- fs.Close()
- responseStream.Close()
- response.Close()
- Catch ex As Exception
- Console.Out.WriteLineAsync(ex.Message.ToString)
- End Try
- End Sub
- End Module