【问题标题】:Download CSV from serverside to browser in Laravel 4在 Laravel 4 中从服务器端下载 CSV 到浏览器
【发布时间】:2014-11-14 03:54:18
【问题描述】:

我正在使用 Laravel 4 框架,我有一个函数可以创建一个名为 data_78888.csv 的 csv 文件,每次运行该函数以生成 csv 文件时,数字 78888 都会发生变化。该函数返回这样的字符串:“Download/78888”

创建我的 csv 文件的文件夹称为“输出”,位于我的应用文件夹所在的项目文件夹中(它不在公用文件夹中)。

我想做的是创建一个指向我的流程控制器的路由:

Route::get('Download/{token}', array('uses' => 'ProcessController@downloadCSV')); 

在我的控制器中,我想将该 csv 文件发送到浏览器进行下载,我正在这样做:

<?php

class ProcessController extends BaseController {

 public function downloadCSV($token){
        $fileToDownload = "data_".$token.".csv";
        $filePath = "outputs/";
        return Response::download($filePath, $fileToDownload, array(
            'Content-Type'              => 'text/csv',
            'Content-Disposition'       => 'attachment;filename="'.$fileToDownload

        ));
    }
}

问题是这不起作用,我得到一个名为 78888.htm 的 html 文件,并且服务器上出现错误。

请问我怎样才能使它工作?

【问题讨论】:

    标签: php csv laravel-4


    【解决方案1】:

    文件的路径必须包含文件的名称和文件扩展名。

    所以试试这个;

    $fileToDownload = "data_".$token.".csv";
    $filePath = base_path() . "outputs/" . $fileToDownload;
    return Response::download($filePath, $fileToDownload, array(
        'Content-Type'              => 'text/csv',
        'Content-Disposition'       => 'attachment;filename="'.$fileToDownload
    
    ));
    

    还要确保文件存在,然后再下载。

    【讨论】:

    • 对不起,这并没有解决问题,我仍然得到同样的错误
    • 您获得的 htm 文件中有什么内容?您是否在日志中发现任何错误?
    • 日志中有太多错误,我无法将它们全部发布,但 html 文件从未下载它说服务器出错
    • 然后查看错误。如果没有某种帮助,我们无法为您找出错误。尝试清除日志文件,然后再次执行请求。然后日志文件应该有发生的错误。
    • 我查看了日志,我可以修复两个错误,其中一个是:我需要在 $filePath = base_path() 中添加 /。 “输出/”。 $fileToDownload;使其成为 $filePath = base_path() 。 “/输出/”。 $fileToDownload;第二个错误是在我使用的 csv 函数中: $f = fopen('php://temp', 'w'); php://temp 是错误的根源,请问如何在 Laravel 的临时文件夹中打开文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多