如果它不是Base64,它可能是什么?

时间:2014-06-19 14:33:42

标签: vb.net base64 decoding

原始问题

  

我正在使用API​​来获取我上传的缩略图。该服务不是向我提供图像的URL,而是返回一个我认为是Base64的可用文本字符串。但是,我解码此字符串的所有尝试都失败了。有没有人知道服务可能会返回哪些对象类型?如果它不是base64,它会是什么?

screenshot关于API响应的重要信息

回答原始问题

  

@Andrew Tran:指出我的反应看起来像是png文件的原始二进制数据。这有助于纠正我在Base64方面缺乏经验,并引导我进行一些进一步的研究。

首次尝试下载文件

Dim path As String = "C:\Users\username\lpImages\img1.png"
Dim fs As FileStream = File.Create(path)
Dim info As Byte() = New UTF8Encoding(True).GetBytes(thumbnail)
fs.Write(info, 0, info.Length)
fs.Close()

这从未奏效......所以我与同事谈话,最后意识到我的错误

我一直在使用一个抽象类来调用API,并且已经弄清楚了这样一个事实:“request”方法实际上是将返回流读入字符串。该服务将图像png文件作为流返回,但请求方法正在转换此原始流。一旦我创建了不同的请求方法,我就能够将png作为流。从那里开始,按照我的意图使用它相对容易:将图像作为LinkedResources附加到我随后发送的电子邮件中。

原始请求方法代码

response = theRequest.GetResponse
Dim reader As StreamReader = New StreamReader(response.GetResponseStream)
lp_response.response = reader.ReadToEnd

我写的新请求代码

lp_response.response = theRequest.GetResponse.GetResponseStream

用于处理流的VB.Net代码(这只是我正在构建一个LinkedResources列表以传递给我的电子邮件功能的片段;只是为了了解我是如何使用它的)

Dim document As Stream = LPApi.GetDocumentThumbnail(d("id").ToString)
Dim mediaType As String = Utils.GetContentType(Path.GetExtension(d("file_name")))
Dim lrDocument As New LinkedResource(document, mediaType)
lrDocument.ContentId = d("id").ToString

感谢所有评论的人。在涉及Web请求/响应和数据序列化的更深层架构时,我非常缺乏经验。任何好的学习资源都会有所帮助;否则我会继续谷歌搜索:)

2 个答案:

答案 0 :(得分:2)

看起来它根本没有被编码。

IHDR块开始清晰可见,文件开头是纯文本。

答案 1 :(得分:1)

使用HttpWebRequest下载二进制数据然后将响应转换为字符串可能不是一个好主意,只是为了尝试将该字符串转换回二进制数据以将其保存到文件中。

如果您获得了HttpWebResponse个对象,则应该可以使用HttpWebResponse.GetResponseStream获取图像数据的流。然后,您应该能够使用Stream.CopyTo将图像数据直接复制到文件流中。