Ошибка в Chrome, загрузив Excel, созданный ReportViewer

У меня есть следующий код в виде:

<% using (Html.BeginForm("GeneraReporte", "Libro"))
{ %>
    
    " alt="Exportar Excel" />
<% } %>

В Controller:

[HttpPost]
public ActionResult GeneraReporte()
{          
    try
    {
        String format = Request.Form["format"];
        Reportes reportes = new Reportes();
        DataTable lista_tabla = new DataTable();
        String sql = "SELECT dato1, dato2 from empresa";
        conexion.conectar();
        MySqlDataAdapter datos = new MySqlDataAdapter(sql, conexion.con);
        conexion.cerrar();
        datos.Fill(lista_tabla);

        string nombre_display = "Listado";
        string nombreDataSource = "DataSet_Excel";
        string formatoNameRender = "Excel";
        string nameArchivoExcel = "Libro_Diario";
        string nombreReporte = "Report_libro.rdlc";

        reportes.solicitaReporte(format, nombre_display, lista_tabla, nombreDataSource, formatoNameRender, nameArchivoExcel, nombreReporte);
    }
    catch (Exception error)
    {
    }

    return View();
}

В классе имени Повлеки за собой, у меня есть функции, которые берутся за то, чтобы производить Excel:

public void solicitaReporte(string format, string nombre_display, dynamic query, string nombreDataSource, string formatoNameRender, string nameArchivoExcel, string nombreReporte)
{
    LocalReport report = new LocalReport();
    report.DisplayName = nombre_display;
    report.ReportPath = HttpContext.Current.Server.MapPath("~/Reportes/" + nombreReporte);
    ReportDataSource reportDataSource = new ReportDataSource();
    reportDataSource.Value = query;
    reportDataSource.Name = nombreDataSource;
    report.DataSources.Add(reportDataSource);

    byte[] bytes = report.Render(formatoNameRender);
    this.downloadReport(bytes, format, nameArchivoExcel);

    //return System.Web.Mvc.Controller.File(bytes, format);
}

private void downloadReport(byte[] data, string format, string nameArchivoExcel)
{
    Stream stream = new MemoryStream(data);

    byte[] buffer = new Byte[10000];
    int length;
    long data_length;
    try
    {
        data_length = stream.Length;
        HttpContext.Current.Response.ContentType = "application/octet-stream";
        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + nameArchivoExcel + "." + format);

        while (data_length > 0)
        {
            if (HttpContext.Current.Response.IsClientConnected)
            {
                length = stream.Read(buffer, 0, 10000);
                HttpContext.Current.Response.OutputStream.Write(buffer, 0, length);
                HttpContext.Current.Response.Flush();
                buffer = new Byte[10000];
                data_length = data_length - length;
            }
            else
            {
                data_length = -1;
            }
        }
    }
    finally
    {
        if (stream != null) { stream.Close(); }
        HttpContext.Current.Response.Close();
    }
}

Но когда я пробую загружаться в Google Chrome, он говорит мне

Ошибка: Сетевая ошибка.

Разгрузка любой другой файл Интернета и у меня нет проблем. Редкое состоит в том, что оно я функционирует в Firefox.

Мне хотелось бы знать, что он был бы должен делать, чтобы предотвращать эту проблему.

Как я это делаю для того, чтобы оно я функционировало в Google Chrome?

Может быть, будет нужно давать возможность чему-то в web.config. Мне хотелось бы мочь воспроизводить по крайней мере ошибку.

Изображение сетевого транспорта в Mozilla:

introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí

В Google Chrome:

introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí

3
задан 23.02.2017, 00:08
1 ответ

EncontrГ© она soluciГіn, я предположил, что в funciГіn downloadReport tenГ - в какую-то проблему, он следовательно меняет способ это делать. Так я это сделал:

 public FileResult GeneraReporte(string format)//el format es "EXCEL"
    {
        string nombreDataSource="DataSet_1";

        string nombreReporte = "Report.rdlc";

        LocalReport report = new LocalReport();
        report.ReportPath = Server.MapPath("~/Reportes/" + nombreReporte);

        report.DataSources.Clear();
        ReportDataSource reportDataSource = new ReportDataSource();
        reportDataSource.Value = query();
        reportDataSource.Name = nombreDataSource;            
        report.DataSources.Add(reportDataSource);

        report.Refresh();

        return GetFileContentResult(report, format, null, "TestReport");


    public FileContentResult GetFileContentResult(Report report, String format, String deviceInfo, String fileDownloadName)
    {
        String mimeType;
        String encoding;
        String filenameExtension;
        String[] streamIds;
        Warning[] warnings;

        FileContentResult fileContentResult = new FileContentResult(report.Render(format, deviceInfo, out mimeType, out encoding, out filenameExtension, out streamIds, out warnings), mimeType);
        fileContentResult.FileDownloadName = Path.ChangeExtension(fileDownloadName, filenameExtension);

        return fileContentResult;
    }

Ло Гєnico, что я quedarГ - в с сомнением, за которым последует, когда он для pdf, format deberГ, - чтобы быть равен PDF??

0
ответ дан 24.11.2019, 13:22
  • 1
    Как хорошо, что ты нашел solució n, пожалуйста прими твой собственный ответ. Привет. – Mauricio Arias Olave 20.10.2017, 17:31