2012-12-19 1 views
1

에 RAW 이미지 데이터를 얻는 방법 :VB.NET - 나는 다음과 같은 VB.NET에서 문자열로 RAW 이미지 데이터를 얻을 것 어떻게 문자열

J©õݨe‚Lnž¿Ëã/ǧúÐ5ý¼C÷Cý>ß’t;fm—=Äw:�/E±ËÙÏ$á@%Pc>× Šgw.²Ab“:ÅÓù:ϯÌh6à€Z§Ó‚g£®hÚD6¨Ø^Ú2ô`ä¨L�YÆÄÅCX#I“ÈÌãj¦L˜•’|¥�Eb¡ëQ–¤Ú, 3\UzL öÔoj4�•±’u«c¼#„oÕ`îF>·o—ŠûÅ«ÎÑ™¶Ç˜ýº*i°œÈVŒ�Qû”Ñ[.�ÔmçE•ì¦eNCh�Ù 
é§�É$m¿ôš"»ÌNæ(VÌmp›F¹XÈ88™ªüµ…d•XµÔÜ#�ˆŠv‘º‚F‚§Yûb 

내 현재 코드는 다음과 같습니다

Dim FileName As String = "Image.jpg" 
Dim ImageData() As Byte = File.ReadAllBytes(ProfileImagePath) 
Dim NewImageData As String = Convert.ToBase64String(ImageData) 

이 코드는 Base64 코드를 반환하지만 위의 예제에서와 같이 실제 원시 데이터를 얻으려고하므로이 방식으로 게시물을 여러 부분으로 업로드 할 수 있습니다.

업로드 존재에 대한 나의 전체 코드 :

Dim boundary As String = "-----------------------------" & DateTime.Now.Ticks.ToString("x") 
     Dim req As HttpWebRequest = DirectCast(WebRequest.Create("http://www.mysite.com/upload.php"), HttpWebRequest) 
     req.Method = "POST" 
     req.ContentType = "multipart/form-data; boundary=" & "---------------------------" & DateTime.Now.Ticks.ToString("x") 
     req.KeepAlive = False 
     Dim builder As New StringBuilder() 
     builder.Append(boundary & vbCrLf & "Content-Disposition: form-data; name=""variable1""" & vbCrLf & vbCrLf & "1" & vbCrLf) 
     builder.Append(boundary & vbCrLf & "Content-Disposition: form-data; name=""file""; filename=""" & FileName & """" & vbCrLf) 
     builder.Append("Content-Type: application/octet-stream") 
     builder.Append(vbCrLf & vbCrLf) 
     ' Add Photo Here 
     If UpdateImage = True Then 
      ' Load Image 
      Dim ImageData() As Byte = File.ReadAllBytes(ProfileImagePath) 
      Dim NewImageData As String = Convert.ToBase64String(ImageData) 
      ' Add Image To Header 
      builder.Append(NewImageData) 
      builder.Append(vbCrLf) 
     Else 
      builder.Append(vbCrLf) 
     End If 
     builder.Append(boundary & vbCrLf & "Content-Disposition: form-data; name=""save""" & vbCrLf & vbCrLf & "save") 
     ' Footer Bytes 
     Dim close As Byte() = Encoding.UTF8.GetBytes("--") 
     Dim postHeader As String = builder.ToString() 
     Dim postHeaderBytes As Byte() = Encoding.UTF8.GetBytes(postHeader) 
     Dim boundaryBytes As Byte() = Encoding.ASCII.GetBytes(vbCrLf & boundary & "--" & vbCrLf) 
     Dim length As Long = postHeaderBytes.Length + boundaryBytes.Length 
     req.ContentLength = length 
     Dim requestStream As Stream = req.GetRequestStream() 
     Dim fulllength As Integer = postHeaderBytes.Length + boundaryBytes.Length 
     ' Write out our post header 
     requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length) 
     ' Write out the trailing boundary 
     requestStream.Write(boundaryBytes, 0, boundaryBytes.Length) 
     Dim responce As WebResponse 
     responce = req.GetResponse() 
     requestStream.Close() 
     Dim s As Stream = responce.GetResponseStream() 
     Dim sr As New StreamReader(s) 
     Dim Content As String = sr.ReadToEnd() 
+1

그렇게하지 마십시오. 바이트 배열을 사용해야합니다. – SLaks

+0

그들은 모두의 입술에 질문을합니다, "왜?" –

답변

6

이는 Base64로 코드를 반환하지만

은 "실제 위의 예에서와 같이 실제 원시 데이터를 얻기 위해 노력하고 있어요 원시 데이터 "은 텍스트 데이터이 아니므로 문자열에 넣으면 안됩니다. 적어도 base64와 같은 것은 없다.

는 이진 데이터, 중 하나 사용 base64로 또는 원시 바이트로 게시물을 게시 할 경우

하지만 텍스트로 하지. 데이터가 이 아니고 UTF-8로 인코딩 된 텍스트이므로 그대로 사용하지 마십시오.

(I은 여러 부분으로 양식 데이터의 세부 사항을 기억하지 수 있으며, 일부 자체가, 당신은 직접 바이너리 데이터를 포함 괜찮을 전에이 부분의 길이를 지정할 수있는 경우가 항상 단지 구분 있다면. 일부 구분 기호로 대신 base64를 사용할 수 있습니다.)

관련 문제