Enobong Adahada Ответов: 1

Экспорт отчета crystal из ihttpactionresult в webapi


Я пытаюсь экспортировать отчет crystal из asp.net web API IhttpActionResult, отчет экспортируется, но поврежден и не может быть восстановлен после загрузки. однако тот же отчет при экспорте на диск, если он хорош и удобен для использования. пожалуйста, как мне этого добиться, спасибо.

Что я уже пробовал:

IHttpActionResult response;
           HttpResponseMessage responseMsg = new
           responseMsg.Content = new ByteArrayContent(new StreamContent(rd.ExportToStream(ExportFormatType.PortableDocFormat)).ReadAsByteArrayAsync().Result);
           responseMsg.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
           responseMsg.Content.Headers.ContentDisposition.FileName = "Print.pdf";
           responseMsg.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

           return response;

1 Ответов

Рейтинг:
1

Richard Deeming

Не используйте .Result чтобы заставить асинхронную операцию выполняться синхронно. Вы можете просто сделать свое действие async и await операция.

Но в данном случае вам это не нужно. ByteArrayContent вообще. Просто используйте StreamContent непосредственно.

responseMsg.Content = new StreamContent(rd.ExportToStream(ExportFormatType.PortableDocFormat), 1024 * 1024);


Enobong Adahada

Спасибо вам, Ричард, за быстрый ответ, я опробовал ваше решение и получаю ту же ошибку, когда скачиваю файл и пытаюсь его открыть: "произошла ошибка при открытии этого документа, файл поврежден и не может быть восстановлен.

Richard Deeming

На первый взгляд, вам может потребоваться сбросить положение потока после экспорта:

Stream pdfStream = rd.ExportToStream(ExportFormatType.PortableDocFormat);
if (pdfStream.CanSeek) pdfStream.Seek(0L, SeekOrigin.Begin);
responseMsg.Content = new StreamContent(pdfStream, 1024 * 1024);

В противном случае вам нужно будет открыть загруженный файл в двоичном редакторе, чтобы увидеть, выглядит ли он нормально.

Enobong Adahada

Еще раз спасибо, я уже пробовал это, и это дает те же самые проблемы.

Richard Deeming

Затем вам нужно будет открыть загруженный файл в двоичном редакторе, чтобы увидеть, как выглядит содержимое.