VB.NET - 如何将原始图像数据转换为字符串

Chr*_*ris 1 vb.net gdi image-processing httpwebrequest

如何将原始图像数据获取到VB.NET中的String,类似于以下内容:

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
Run Code Online (Sandbox Code Playgroud)

我目前的代码是:

Dim FileName As String = "Image.jpg"
Dim ImageData() As Byte = File.ReadAllBytes(ProfileImagePath)
Dim NewImageData As String = Convert.ToBase64String(ImageData)
Run Code Online (Sandbox Code Playgroud)

这将返回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()
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

这将返回Base64代码,但我正在尝试获取上面示例中的实际原始数据

"实际原始数据" 不是文本数据,因此您根本不应将其放入字符串中; 至少没有像base64这样的东西.

如果你想发布的二进制数据,那么无论是使用的base64 张贴作为原始字节,而不是为文本.您的数据不是 UTF-8编码的文本,因此请勿尝试使用它.

(我不记得多部分表单数据的细节;如果你可以在部件本身之前指定一个部件长度,那么你可以直接包含二进制数据.如果它总是由一些分隔符分隔,那么你可能想要使用base64.)