You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将服务器响应返回的PDF字节字符串转换为可用的PDF文件?

核心错误点

  • 自定义TxtToBin函数逻辑完全错误:该函数将原始字节转换为01格式的二进制字符串拼接输出,你后续将该字符串编码为字节写入文件,写入内容和原PDF二进制数据完全无关,必然导致文件损坏,请直接删除该函数。
  • 将PDF二进制内容以普通字符串形式读取:PDF是二进制格式,包含大量非文本字符,调用GetParameterValue读取为字符串时,会触发默认编码转换,丢失、篡改原始二进制数据,这是直接存储字符串转码后得到的PDF显示空白的核心原因。
  • 多次无意义的编码转换:你先后使用Unicode、UTF8对内容反复编码转码,进一步破坏了原始PDF的字节结构。

正确解决方法

根据你使用MultipartFormDataParser的场景,PDF内容是作为multipart表单的文件字段返回的,不要从普通参数集合读取,要从文件集合读取原始二进制流:

' 发送请求部分增加异常校验,避免未完成请求就读数据
Dim message As Task(Of HttpResponseMessage) = client.PostAsync(linkApi, content)
message.Wait()
Dim response = message.Result
response.EnsureSuccessStatusCode()

' 解析multipart返回
Dim streamResponse = response.Content.ReadAsStreamAsync()
streamResponse.Wait()
Dim parser = MultipartFormDataParser.Parse(streamResponse.Result)

' 读取文件名参数
Dim name_id = parser.GetParameterValue("paramString")
' 从Files集合读取PDF二进制流,不要读普通参数
Dim pdfFile = parser.Files.FirstOrDefault(Function(f) f.Name = "PDF")

If pdfFile IsNot Nothing Then
    Dim saveDir = "你的本地保存目录路径"
    Dim path_pdf = Path.Combine(saveDir, $"{name_id}.pdf")
    ' 直接复制二进制流到本地文件,不做任何编码转换
    Using fs As New FileStream(path_pdf, FileMode.Create, FileAccess.Write)
        pdfFile.Data.CopyTo(fs)
    End Using
End If

如果确认服务器是将PDF转为Base64字符串放在普通参数中返回,使用如下方式解码即可:

Dim pdfBase64 = parser.GetParameterValue("PDF")
Dim pdfBytes = Convert.FromBase64String(pdfBase64)
Dim path_pdf = Path.Combine("你的本地保存目录路径", $"{name_id}.pdf")
File.WriteAllBytes(path_pdf, pdfBytes)

内容的提问来源于stack exchange,提问作者KuKeC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:27:01