Ответ PDF скачать с base64string c # - PullRequest
       9

Ответ PDF скачать с base64string c #

0 голосов
/ 12 сентября 2018

Я пытаюсь создать 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 не является проблемой.

Любой совет по этому поводу будет оценен. Спасибо.

1 Ответ

0 голосов
/ 12 сентября 2018

Попробуйте использовать 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!";
}          
...