2013-03-20 76 views
0

我就執行該代碼使用CakePHP:下載一個CSV在Web瀏覽器中打開了不是一個Microsoft Excel

查看文件

<?php 
    if (isset($csv_filename)) { 
     header("Content-Disposition: attachment; filename=$csv_filename"); 
    } 
?> 
<?=$csv?> 

當我運行該頁面並下載文件(打開方式),它正在谷歌瀏覽器或Firefox等網頁瀏覽器上開放。我想這個文件被打開使用 enter image description here

我預期的輸出應該是這樣的:

enter image description here

其實,一切工作正常,因爲我們遷移到CakePHP的2.2.2之前。

對此的任何想法,您的幫助將不勝感激!謝謝:)

回答

2

添加一個頭告訴瀏覽器這是什麼樣的mimetype,就像這樣;

header('Content-Type: application/vnd.ms-excel; charset=utf-8') 
+0

我應該在現在的代碼上面寫上那個嗎? – PinoyStackOverflower 2013-03-20 06:50:31

+0

無關緊要,只需在將任何內容輸出到瀏覽器之前進行即可。 – 2013-03-20 06:52:24

+0

@igorpan仍然無法正常工作。下載框看起來仍然像這樣http://i.stack.imgur.com/kimyE.png – PinoyStackOverflower 2013-03-20 06:57:26

1

要將文件下載爲CSV設置,請使用路由來檢測CSV。在您的routes.php文件文件確保你設置瞭解析擴展的CSV: -

Router::parseExtensions('csv'); 

然後在你的控制器設置文件名的CSV,並確保您使用的是佈局不輸出標記(如默認ajax.ctp): -

$this->response->download("$csv_filename.csv"); 
$this->layout = 'ajax'; 

另外,還要確保你在你的控制器的組件列表RequestHandler: -

public $components = array('RequestHandler'); 

你只需把你的行動templat e在控制器視圖的csv目錄中。

如果它仍然不起作用,那麼可能有一些標記正在輸出,需要刪除。 Cake的錯誤可以做到這一點。

+0

我已經更正了這些錯誤,但仍然會讓我在我的問題的第一張圖片上下載相同的圖片 – PinoyStackOverflower 2013-03-20 15:07:58

+1

您確定該文件不包含HTML標記嗎?保存文件並檢查內容。如果文件中存在錯誤,獲取在CakePHP中工作的CSV文件可能會有點痛苦。您可能想查看http://www.dereuromark.de/2011/11/21/serving-views-as-files-in-cake2/,其中詳細介紹了我在此處爲可下載的CSV文件提供的方法。 – drmonkeyninja 2013-03-20 15:49:11

相關問題