OutputStream недоступен, если используется пользовательский TextWriter

это моя функция, которая преобразует PDF в png-изображение, оно бросает ошибку на эта строка → stream.WriteTo(Response.OutputStream); Есть ли что-то неправильно?

protected void CreatePngFromPdf() 
        {

            try
            {

                string PDFLocation = string.Format(@"\\XXXX\{0}\{1}\{2}.pdf", Yr, Loc.Substring(0, 4), Loc.Substring(4, 4));
                Utilities.WebPDF.PDF WebPDF = new DocuvaultMVC.Utilities.WebPDF.PDF();

                WebPDF.Credentials = new NetworkCredential(@"xyz", "xyz");
                byte[] png = WebPDF.StreamPdfPageAsPngResize(PDFLocation,PageNumber, 612, 792);

                MemoryStream ms = new MemoryStream(png);
                MemoryStream stream = new MemoryStream();
                int newWidth = 612;
                int newHeight = 792;
                System.Drawing.Image newImg = System.Drawing.Image.FromStream(ms);

                Bitmap temp = new Bitmap(newWidth, newHeight, newImg.PixelFormat);
                Graphics newImage = Graphics.FromImage(temp);
                newImage.DrawImage(newImg, 0, 0, newWidth, newHeight);
                newImg.Dispose();

                temp.Save(stream, ImageFormat.Png);
                stream.WriteTo(Response.OutputStream);
                temp.Dispose();
                stream.Dispose();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message.ToString());
            }
        }

Ответ 1

Это не имеет прямого отношения к вашей проблеме, но у меня такое же исключение, когда я делаю что-то еще, поэтому я подумал, что поставил бы этот ответ для потомков...

Я получил это исключение, только когда страница была рендеринга, а не при переходе к соответствующему действию контроллера.

Появляется много царапин на голове, пока я не понял, что использовал Html.Action (который запускает действие и испускает встроенный HTML), а не Url.Action (который генерирует URL-адрес).

Ответ 2

В моем случае причиной был неправильный аргумент в методе Controller.File.

Метод Controller.File с третьим параметром как null отобразит изображение в окне браузера:

public ActionResult GenerateImage(...)
{
    ...
    return File(fileResult.Buffer, fileResult.ContentType, null);
}

Метод Controller.File с третьим параметром имя_файла запускает загрузку изображения в браузере:

public ActionResult GenerateImage(...)
{
    ...
    return File(fileResult.Buffer, fileResult.ContentType, "image.jpg");
}

Метод Controller.File с третьим параметром как расширение приведет к ошибке: OutputStream недоступен, если используется пользовательский TextWriter

public ActionResult GenerateImage(...)
{
    ...
    return File(fileResult.Buffer, fileResult.ContentType, ".jpg");
}