响应PDF从base64string下载c#

问题描述 投票:1回答:1

我正在尝试使用API​​来下载PDF,我所做的就是这样:

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# pdf memorystream
1个回答
1
投票

尝试使用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!";
}          
© www.soinside.com 2019 - 2024. All rights reserved.