2015-01-22 3 views
0

У меня есть файл csv в моем webroot/files..когда я нажимаю на ссылку, я хочу, чтобы этот файл csv был загружен. Я написал следующий код, и файл также загружается, но в этом загруженном файле нет содержимого. Пожалуйста, помогите загрузить файл csv со всем контентом.Как загрузить файл csv в CakePHP

этот ismy код:

public function downloadSamplefile() 
{ 
    $name= "abc format.csv";  

    $file_path=HTTP_ROOT."app\webroot\files".$name; 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/force-download'); 
    header("Content-Disposition: attachment; filename=\"" . basename($name) . "\";"); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($name)); 
    $file = @fopen($file_path); 
    ob_clean(); 
    flush(); 
    readfile(HTTP_ROOT."app\webroot\files".$name); 

    @fclose($file); 
    exit; 

} 
+0

нет необходимости 'fopen' и' fclose'.Также 'filesize' должен воспринимать' $ file_path' как аргумент, а не '$ name' – Steve

+0

, потому что steve..i изменился как и сказал, но та же проблема сохраняется, поскольку я получаю пустой файл csv. –

+1

http://stackoverflow.com/search?q=%5Bcakephp%5D+download+file – ndm

ответ

0

Проблема в пути (вар $file_path) Я думаю.

IFfiles папка внутри app\webroot\ тогда $ file_path переменная будет

$file_path=ROOT."app\\webroot\\files\\".$name; // \ is also needed after 'file' 
    //double \\ coz of escape char, try with single/also as follows 
$file_path=ROOT."app/webroot/files/".$name; 
    // best way to use cake php's functionality 
$file_path=WWW_ROOT."files".DS.$name; 

И изменение ReadFile и filesize параметр функции также:

readfile($file_path); 
header('Content-Length: ' . filesize($file_path)); 

Удалить следующие две строки как комментарий @ steve:

$file = @fopen($file_path); 
@fclose($file); 

Потому что readfile сам функционирует ОТКРЫТЫЙ, затем ЗАКРЫТЬ файл автоматически.


Если не работает то попробовать с:

$name="abc%20format.csv"; //space is encoded as %20 in URLs 
+0

спасибо за ваш ответ .. Изменен код, но та же проблема сохраняется, и я получаю пустой файл csv –

+0

@CHANDANPATTNAIK ok, вместо 'HTTP_ROOT' использует' ROOT' | ** см. мой отредактированный ответ ** –

+0

@CHANDANPATTNAIK, также debug, изменяя 'if (! readfile ($ file_path)) echo« blank csv », не смог прочитать файл, путь к файлу -«. $ file_path; '| если у вас есть msg в загруженном файле csv, это означает, что в чтении есть проблема, которая может быть неправильной «$ file_path». не используйте 'HTTP_ROOT' /' ABS_ROOT', это URL-адреса, которые будут переписаны с помощью 'url rewrite' и будут изменены. См. Путь к файлу в загруженном CSV или NOT. –

1

Как насчет просто читать руководство? There is a whole page dedicated to how to send files. Также есть готовый код для копирования и вставки, который показывает, как это сделать правильно.

Также не имеет смысла подталкивать ваш файл через php, если он доступен в общедоступном, незащищенном webroot. Просто свяжите файл напрямую.

0

выполните следующие действия:

Шаг-1

в вас контроллер создать метод

public function downloadSamplefile() { 
    $this->viewClass = 'Media'; 
    // Download app/webroot/files/example.csv 
    $params = array(
    'id'  => 'example.csv', 
    'name'  => 'example', 
    'extension' => 'csv', 
    'download' => true, 
    'path'  => APP . 'webroot' . DS. 'files'. DS // file path 
); 
$this->set($params); 
} 

шаг-2

Перейти к файл CTP & запись ссылка как

echo $this->Html->link(
'Download Sample', 
array(
    'controller' => 'dashboards', // controller name 
    'action' => 'downloadSamplefile', //action name 
    'full_base' => true 
)); 

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

При нажатии на Скачать образец ссылку будет загрузить CSV-файл, который хранится в вашем приложении/Webroot/файлы/exampl.csv

ссылка ссылка cakephp.org documentation

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