2017-01-11 4 views
1

Привет, я пытаюсь экспортировать большую таблицу (100 000 строк в файл CSV) с использованием метода laravel StreamedResponse chunk. С кодом, вставленным ниже, он не работает нормально и показывает ошибку ниже.Файл StreamedResponse не найден

enter image description here

Файл не найден Firefox не может найти файл на http://laravel/allExport2. Проверьте имя файла для капитализации или другие ошибки ввода. Проверьте, был ли файл перемещен, переименован или удален .

Контроллер

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

Ok, ваш браузер получил ошибку 404.

Для этого есть несколько причин.

  1. Проверьте свои маршруты, подтвердите, что пытаетесь получить доступ к существующему. Также обратите внимание, что маршруты чувствительны к регистру. Это означает, что Route::get('SuPeRCRaZyPaGe', function(){...}) не будет доступен для /supercrazypage или /SuperCrazyPage.

  2. Проверить поселение, может быть, оно не выбрало исключение или abort(404).

  3. Проверьте свой код, если вы работаете с Eloquent models и имеете findOrFail или firstOrFail чехлы. Проверьте их, они могут бросить ModelNotFoundException (преобразуется в ошибку 404).

И, конечно же, не забудьте проверить журнал Laravel в (~/storage/logs/laravel.log) и включить параметры отладки.