2015-01-30 3 views
2

Я получаю это исключение. Я следил за предложениями, приведенными в What does this error mean? The remote host closed the connection. The error code is 0x80070057Исключение: «Удаленный хост закрыл соединение. Код ошибки 0x80070057«

все еще, я получаю ту же ошибку.

Передача файла с сервера на браузер клиента с использованием Response.WriteFile().

В Виде:

$("#btnExport").on("click", function (e) { 
     window.location = '@Url.Action("ExportToExcel", "Report")'; 
     e.preventDefault(); 
    }); 

В контроллере:

[HttpGet] 
public RedirectResult ExportToExcel() 
{ 
    Download(ExportFilePath);  
    return new RedirectResult(ExportFilePath); 
} 

public void Download(ExportFilePath) 
{ 
    HttpContext context = System.Web.HttpContext.Current; 
    FileInfo file = new FileInfo(ExportFilePath); 
    context.Response.Clear(); 
    context.Response.ClearHeaders(); 
    context.Response.ClearContent(); 
    context.Response.AppendHeader("Content-Disposition", "attachment; filename =" + ExportFileName); 
    context.Response.AppendHeader("Content-Length", file.Length.ToString()); 
    context.Response.ContentType = "application/excel"; 
    context.Response.WriteFile(file.FullName); 
    context.Response.Flush(); 
    context.Response.Close(); 
    context.Response.End(); 
} 
+0

Ваш 'RedirectResult (ExportFilePath)' немного странный. Это должен быть url, где страница должна быть перенаправлена, а не путь к файлу –

+0

@rock_walker: Какова предлагаемая реализация действия, где я могу разместить метод Download(). –

+0

@BhaweshPaliwal Ошибка просто означает, что пользователь закрыл свой браузер, прежде чем все было отправлено с сервера на клиент, например. файл клиентских запросов, сервер начинает передавать файл, но до того, как сервер завершит отправку файла, пользователь закрывает браузер ... в основном вы ничего не можете с этим поделать. –

ответ

4

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

context.Response.WriteFile(file.FullName); 
context.Response.Flush(); 
context.Response.Close(); 
context.Response.End(); 

добавить Пыльник линии

context.Response.TransmitFile(strFileName); 

Решение 2:

FileStream myFileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
long FileSize = myFileStream.Length; 
byte[] Buffer = new byte[(int)FileSize]; 
myFileStream.Read(Buffer, 0, (int)FileSize); 
myFileStream.Close(); 
myFileStream.Dispose(); 

Response.ContentType = "image/jpeg"; 
Response.AddHeader("Content-Type", "image/jpeg"); 
Response.AddHeader("Content-Disposition", "attachment;filename=FILENAME.jpg"); 

Response.BinaryWrite(Buffer); 
Response.End(); 

дайте мне знать, если выше решение не работает для вас.

+0

Спасибо! ваше оба решения отлично работали для меня. –

+0

Тогда оцените это, приняв это как ответ и проголосовав +1 :) –

Смежные вопросы