FileStreamResult Обработка ошибок - PullRequest
       33

FileStreamResult Обработка ошибок

2 голосов
/ 31 декабря 2011

ASP.Net MVC 3

У меня есть действие, которое возвращает FileStreamResult после того, как он импортирует документ PDF и помечает его водяным знаком. Так как возможно, что файл не найден, как мне вернуть представление вместо файлового потока?

Чтобы усложнить ситуацию, я использую jQuery PDFObject Филипа Хатчисона (http://pdfobject.com), чтобы вызвать действие и отобразить его в DIV, чтобы я не мог перенаправить на стороне сервера.

Повторюсь: это ссылка на страницу jQuery, которая заполняет DIV результатами из потока файлов PDF. Единственное, что я могу придумать - это отправить файл Error.pdf.

Ваши мысли?

1 Ответ

0 голосов
/ 05 января 2012

Я закончил тем, что создал поток памяти PDF с ошибкой.

MemoryStream ms = new MemoryStream();
try
    {
        PdfReader reader = new PdfReader(readerURL);
        StampWatermark(WO, ms, reader);
    }

catch (Exception ex)
    {
        RenderErrorPDF(WO, ms, ex);
    }

byte[] byteinfo = ms.ToArray();
ms.Write(byteinfo, 0, byteinfo.Length);
ms.Position = 0;
ms.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(ms, "application/pdf");

Метод RenderErrorPDF

private static void RenderErrorPDF(WorkOrder WO, MemoryStream ms, Exception ex)
    {
        BaseFont bfTimes = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, false);
        var doc = new Document(new Rectangle(792f, 540f));
        var wr = PdfWriter.GetInstance(doc, ms);
        doc.Open();
        doc.Add(new Paragraph("There was an error rendering the file that you requested...", new Font(bfTimes, 24f)));
        doc.Add(new Paragraph(string.Format("\r\rFile: {0}", WO.DRAWING_FILE)));

        doc.Add(new Paragraph(string.Format("\r\rError: {0}", ex.Message)));
        wr.CloseStream = false;
        doc.Close();
    }
...