Response.Write Base64字符串

时间:2012-04-11 10:51:56

标签: c# asp.net http

我收到一个Base64字符串,它实际上是PDF文件的字符串表示形式。我想用Response.Write编写这个字符串,但不将其转换回二进制表示。

我试过了:

var base64string = "...";
Response.Write(base64String);
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Transfer-Encoding", "base64");

浏览器无法将内容识别为base64编码的PDF文件。我该如何解决这个问题?

编辑:这是回复

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/pdf; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
Content-Transfer-Encoding: base64
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 11 Apr 2012 11:00:04 GMT
Content-Length: 107304

JVBERi0xLjQKJeLjz9MKMSA... more content here

3 个答案:

答案 0 :(得分:5)

Content-Transfer-Encoding不是有效的HTTP标头;这是MIME的旧标题。它的HTTP等价物是Transfer-Encoding,它支持以下值:

  • 分块
  • 身份
  • gzip的
  • 压缩
  • 放气

如果你有一个Base64编码的PDF文档,HTTP中没有“from base64”转换,它将为你解码这个文档,所以你必须解码它在你的服务器上,把它放在响应主体中。

如果您想要从Base64转换的流,可以将FromBase64Transform用于CryptoStream

new CryptoStream(fileStream, new FromBase64Transform(), CryptoStreamMode.Read)

答案 1 :(得分:3)

当您使用

承诺PDF时
 Response.ContentType = "application/pdf";

您还应该通过打开响应流并在那里编写PDF的二进制版本来提供一个。

答案 2 :(得分:0)

你能试试吗

var base64string = "...";
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Transfer-Encoding", "base64");
Response.Write(base64String);
Response.End();

可能会帮助你