首页 > 解决方案 > 从base64string c#响应PDF下载

问题描述

我正在尝试做一个用于下载 PDF 的 API,我所做的是这样的:

HttpResponseMessage result = new HttpResponseMessage();
MemoryStream stream = new MemoryStream();
try {
    var base64 = "...";
    byte[] pdfBytes = Convert.FromBase64String(base64);

    stream = new MemoryStream(pdfBytes);

    var resultPDF = Encoding.UTF8.GetString(stream.ToArray());

    result.StatusCode = HttpStatusCode.OK;
    result.Content = new StringContent(resultPDF);
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "BuildingDetail.pdf" };

} catch (Exception e) {
    stream.Close();
    result.StatusCode = HttpStatusCode.InternalServerError;
    result.ReasonPhrase = e.Message;// "Error occured while exporting csv file!";
} finally {
    stream.Close();
}

当我尝试测试 API 时,它可以下载,但 PDF 是空的。

我还尝试复制base64字符串并通过其他免费源decode and download网站对其进行解码,它似乎工作正常,所以这base64不是问题。

对此的任何建议将不胜感激。谢谢。

标签: c#pdfmemorystream

解决方案


尝试使用 ByteArrayContent:

HttpResponseMessage result = new HttpResponseMessage();
try 
{
    byte[] pdfBytes = System.IO.File.ReadAllBytes(pdfLocation);
    result.StatusCode = HttpStatusCode.OK;
    result.Content = new ByteArrayContent(pdfBytes );
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "BuildingDetail.pdf" };

} 
catch (Exception e) 
{
    result.StatusCode = HttpStatusCode.InternalServerError;
    result.ReasonPhrase = e.Message;// "Error occured while exporting csv file!";
}          

推荐阅读