2012-12-19 45 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代替)。

相关问题