4

我收到一个 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
4

3 回答 3

5

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

  • 分块
  • 身份
  • 压缩包
  • 压缩
  • 放气

如果您有一个 Base64 编码的 PDF 文档,那么 HTTP 中没有“来自 base64”的转换可以为您解码此文档,因此您必须在将其放入响应正文之前在您的服务器上对其进行解码。

如果你想要一个从 Base64 转换的流,你可以使用 a FromBase64Transforminto a CryptoStream

new CryptoStream(fileStream, new FromBase64Transform(), CryptoStreamMode.Read)
于 2012-04-11T11:54:22.077 回答
3

当您承诺使用 PDF 时

 Response.ContentType = "application/pdf";

您还应该通过打开响应流并在其中编写PDF的二进制版本来交付一份。

于 2012-04-11T11:05:46.000 回答
0

你能试试这个

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

可能这会帮助你

于 2012-04-11T11:28:23.087 回答