Laravel - 文件下载

时间:2016-04-05 22:10:06

标签: php laravel laravel-5

您好我正在尝试修复我正在处理的Laravel下载错误。我有正确的路由设置,并在控制器中正确的功能。我也能够确认我有权访问该文件,因为我使用完全相同的路径创建了一个文件并将其返回。通过这样做,我能够成功返回文件的内容。但是,当我尝试使用视图中的按钮并调用控制器函数时,我收到此错误:

FileNotFoundException in File.php line 37:
The file "The file "2016-04-04_07-21-50 - Pinging host: 192.168.2.1
2016-04-04_07-21-50 - Host 192.168.2.1 is up!
2016-04-04_07-21-50 - Pinging host: 192.168.2.2
2016-04-04_07-21-53 - Pinging host: 192.168.2.3 ...

现在这里是导致此错误的代码:

show.blade.php

<a class="btn btn-default col-md-12" href="/getDownload/{{ $now }}" role="button">Download Today's Log</a>

HonoursController.php

public function getDownload($id)
    {
      $file = File::get("../resources/logs/$id");
      $headers = array(
           'Content-Type: application/octet-stream',
      );
      #return Response::download($file, $id. '.' .$type, $headers); 
      return response()->download($file, $id.'txt', $headers);
    }

我能够猜测的是我收到了500 HTTP错误。但是,我的检查并未向我提供任何其他信息。知道发生了什么事吗?

3 个答案:

答案 0 :(得分:2)

试试这个:

public function getDownload($id)
{
    // $file = File::get("../resources/logs/$id");
    $headers = array(
       'Content-Type: application/octet-stream',
    );
    #return Response::download($file, $id. '.' .$type, $headers); 
    return response()->download("../resources/logs/$id", $id.'txt', $headers);
}

来自文档:

  

下载方法可用于生成强制执行的响应   用户的浏览器以给定的路径下载文件。

     

返回响应() - &gt;下载($ pathToFile,$ name,$ headers);

https://laravel.com/docs/5.1/responses#basic-responses

答案 1 :(得分:1)

下载方法的第一个参数应该是文件的路径,而不是文件本身。

  

下载方法可用于生成强制执行的响应   用户的浏览器以给定路径下载文件。 ...

     

来源:https://laravel.com/docs/5.2/responses#file-downloads

答案 2 :(得分:0)

请遵循以下两个步骤:

  1. 使用模型查找文件的详细信息。
  2. 使用Laravel Response在标题的帮助下下载文件。

此处Blog是模型,$ id是指示文件的主键。存储文件名的表的列名是cover_image,因此 $ file_name = $ blog-> cover_image; 为我们提供了文件名。假设我们的文件位于Laravel公用文件夹的upload / images /中。

控制器

int stateCode = 01;
while (stateCode <= 56) {                   
    if (line.startsWith(Integer.toString(stateCode))) {  
                System.out.println(stateCode);                          
            String[] stringValues = line.split("    ");                 
        for (int i = 0; + i < stringValues.length; i++) {                                
                       System.out.println(stringValues[i]);             
               }
        }   
        stateCode++;            
    }

路线

`public function download(Blog $blog,$id){
    $blog=$blog->find($id);
    $headers = array(
        'Content-Type: application/octet-stream',
     );
    $pathToFile=public_path('upload/images/');
    $file_name=$blog->cover_image;
    $download_name='Download-'.$file_name;
    return response()->download($pathToFile.$file_name, $download_name, $headers);
 }`

查看

在这里,['id'=> 1]表示我们要下载主键为1的文件。如果要下载另一个,只需更改任何n个整数即可。

`Route::get('{id}/file-download',['as'=>'file-download','uses'=>'BlogsController@download']); ` 

`