2012-12-19 42 views
1

我怎麼會得到原始圖像數據在VB.NET類似於下面的字符串:VB.NET - 如何獲取原始圖像數據,以字符串

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代碼,但我試圖獲取上面示例中的實際原始數據,以便我可以POST到以這種方式發佈的分段上傳表單。

我對上傳的幸福全碼:

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編碼的文本,因此不要嘗試像使用它那樣使用它。 (我不記得多部分表格數據的細節;如果你可以在零件本身之前指定零件長度,那麼你應該沒問題直接包含二進制數據。如果是總是只是分隔通過一些分隔符,那麼你可能會想用base64代替)。

相關問題