代码之家  ›  专栏  ›  技术社区  ›  Dean

从Base64C下载响应PDF#

  •  1
  • Dean  · 技术社区  · 6 年前

    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 网站似乎运作良好,所以使 不是问题所在。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Access Denied    6 年前

    尝试使用ByteArray内容:

    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!";
    }