2014-02-05 2 views
2

이미지 (또는 wav 파일)를 추출하려고하는 웹 REST 서비스가 있습니다. 메모리 스트림을 통해 이미지 (jpg)를 가져 와서 그림 상자에 표시 한 다음 그림 상자를 파일에 저장할 수 있습니다. 그림 상자를 사용하고 메모리 스트림을 파일에 곧바로 저장하는 중간 단계를 없애고 싶습니다. 그러나 결과 파일은 jpg 파일로 보이지 않습니다. 열 때 손상된 파일 오류가 발생합니다.vb.net 파일로 웹 바이너리 저장

 Dim msgURI As String 
     msgURI = "http://192.168.0.1/attachment/12345/0" 

     Dim Pic As New PictureBox() 

     Dim web_client As New WebClient() 
     web_client.Credentials = New NetworkCredential("XX", "XX") 
     Dim image_stream As New MemoryStream(web_client.DownloadData(msgURI)) 
     Pic.Image = Image.FromStream(image_stream) 


     Dim bm As Bitmap = Pic.Image 
     Dim filename As String = "c:\temp\test.jpg" 
     bm.Save(filename, Imaging.ImageFormat.Jpeg) 

을하고 잘 작동 다음과 같이

내가 가지고있는 코드입니다.

 Using file As New FileStream(filename, FileMode.Create, System.IO.FileAccess.Write) 
      Dim bytes As Byte() = New Byte(image_stream.Length - 1) {} 
      image_stream.Read(bytes, 0, CInt(image_stream.Length)) 
      file.Write(bytes, 0, bytes.Length) 
      image_stream.Close() 
     End Using 

내가 손상된 JPG 파일입니다 파일을 얻을 :

그러나 나는 비트 맵과의 PictureBox를 무시하려면 다음을 사용하는 경우.

도움을 주시면 감사하겠습니다.

테리

답변

0

WebClient.DownloadData있어서 바이트 배열을 반환한다. 따라서 바이트 배열을 다른 바이트 배열로 다시 읽어 들이기 위해 바이트 배열을 메모리 스트림에로드하는 것은 대단히 어리석은 것처럼 보입니다. 그 모두는 쉽게 다음과 같이 파일에 첫 번째 바이트의 배열에서 직접 이동하여 수행 할 수 있습니다 : 당신이 파일을 웹에서 직접 데이터를 스트리밍 할 수 있기 때문에

File.WriteAllBytes("c:\temp\test.jpg", web_client.DownloadData(msgURI)) 

그러나, 그 같은 비효율적이다 이 :

web_client.DownloadFile(msgURI, "c:\temp\test.jpg")