2017-01-11 123 views
1

您好,我正在嘗試使用laravel StreamedResponse塊方法將大表(100 000行導出爲CSV文件)。用下面的代碼粘貼它不能正常工作,並顯示下面的錯誤。StreamedResponse文件未找到錯誤

enter image description here

沒有發現在 http://laravel/allExport2的Firefox不能找到該文件的文件。檢查文件名的大寫或 其他鍵入錯誤。檢查文件是否被移動,重命名或刪除 。

控制器

use Symfony\Component\HttpFoundation\StreamedResponse; 
$headers = array(
      'Content-Type'  => 'text/csv', 
      'Cache-Control'  => 'must-revalidate, post-check=0, pre-check=0', 
      'Content-Disposition' => 'attachment; filename=test.csv', 
      'Expires'    => '0', 
      'Pragma'    => 'public', 
     ); 

     $response = new StreamedResponse(function(){ 
      // Open output stream 
      $handle = fopen('php://output', 'w'); 

      // Add CSV headers 
      fputcsv($handle, [ 
       "invoice_number", 
       "title", 
      ]); 


      Order::chunk(500, function($orders) use($handle) { 
        foreach ($orders as $user) { 
         // Add a new row with data 
         fputcsv($handle, [ 
          $user->invoice_number, 
          $user->courtesy_title, 
         ]); 
        } 
       }); 

      // Close the output stream 
      fclose($handle); 
     }, 200, $headers); 

     return $response->send(); 
+0

嘗試使用' - > send()',' - > send()''''''''setCallback()''來禁止使用''''>。 – Ohgodwhy

+0

@Ohgodwhy顯示未找到相同的錯誤文件。 – meera1002

+0

@meera1002,檢查你的路線(可能是你試圖打開不存在的路線),確保你的代碼被調用。用簡單的東西代替它,比如'echo「Hello world」;' –

回答

0

好吧,您的瀏覽器收到的404錯誤。

有幾個原因。

  1. 檢查您的路線,確認您嘗試訪問現有的路線。另請注意,路由區分大小寫。這意味着Route::get('SuPeRCRaZyPaGe', function(){...})將無法​​訪問/supercrazypage/SuperCrazyPage

  2. 檢查中間件,可能是拋出未發現異常或abort(404)

  3. 請檢查您的代碼,如果您使用的是Eloquent型號並且有findOrFailfirstOrFail個案。檢查他們,他們可以拋出ModelNotFoundException(轉換爲404錯誤)。

當然,不要忘記檢查laravel的日誌(~/storage/logs/laravel.log)並啓用調試設置。