2015-04-03 78 views
3

我試圖從MVC 5控制器流式輸出,並且無法使瀏覽器(IE 10,11,Chrome)識別出 輸出流和管道到Excel。我已通過將輸出保存到 文件並打開它來驗證該流是有效的Excel文件。我已經使用Fiddler來確定標題和數據看起來沒問題(見下文)。控制器是 由下面列出的jquery ajax調用調用。下面列出了所調用的Controller方法。 ajax返回狀態返回錯誤函數,req.status = 200(OK),但status ='parseerror'。 任何幫助,將不勝感激。將excel文件從MVC 5控制器流式傳輸到瀏覽器

$.ajax({ 
    type: "POST", 
    url: "http://localhost:42655/Home/Save", 
    data: paramdata, 
    contentType: defaultjsonformat, 
    dataType: 'json', 
    success: function(data) { 
     alert(data); 
    }, 
    statusCode: { 
     404: function (content) { alert('cannot find resource'); }, 
     500: function (content) { alert('internal server error'); } 
    }, 
    error: function (req, status, errorObj) { 
     if (status === "timeout") { 
      alert('Timeout'); 
     } else { 
      alert(status); 
     } 

    } 

); 

HomeController.cs:

[AcceptVerbs(HttpVerbs.Post)] 
public FileStreamResult Save(string document) 
{ 
    document = document.Trim(); 


    byte[] bytefile = Export.Excel.ProcessExport.ExportFile(document); 

    var stream = new MemoryStream(bytefile); 

    return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", document + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss") + ".xlsx"); 

} 

提琴手輸出:

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
Server: Microsoft-IIS/8.0 
X-AspNetMvc-Version: 5.2 
Content-Disposition: attachment; filename=test2015-04-03-06-52-04.xlsx 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?RDpcTFJQXFJvb3QtREVWXFNjZW5hcmlvXFNjZW5hcmlvXEhvbWVcU2F2ZQ==?= 
X-Powered-By: ASP.NET 
Date: Fri, 03 Apr 2015 13:52:04 GMT 
Content-Length: 9779 

PK 6 F H 

編輯:我意識到,Ajax調用接收的所有數據,所以我現在不知道如何做到用參數調用控制器。

+0

根據http://stackoverflow.com/questions/5061310/jquery-returning-parsererror-for-ajax-request你說jQuery的你期望類型JSON的結果然後你正在返回一個文件,你應該刪除行dataType:'json' – 2015-04-03 14:41:44

+0

是的,但這不是我想要的行爲。我希望將ajax調用重定向到控制器,而控制器又會生成一個流出到瀏覽器的文件。如果有一個可以用參數調用控制器的ajax調用,那也是可以接受的。 – 2015-04-03 14:51:52

+0

如果你真的需要它是一個POST我相信你可以在你的頁面上創建一個表單,而不是進行ajax調用,你可以改變那個表單上的字段並通過JQuery提交它,你將從服務器獲取文件辦法。如果它可以是一個GET,你可以改變你的窗口的位置,並將下載文件。 – 2015-04-03 15:02:15

回答

0

我不認爲你將能夠通過jQuery ajax調用來實現你正在尋找的東西。它不是爲了下載這樣的文件而設計的。

我使用以下插件實現了與您的行爲完全相同的行爲(從MVC控制器異步返回Excel電子表格):https://github.com/johnculviner/jquery.fileDownload

希望幫助:)

相關問題