2014-03-19 119 views
22

我一直在寫一個上傳腳本,即使我使用內建函數Input :: file()的Laravel,它仍然返回null。 我打算髮布我的主控制器代碼。輸入:: file()返回null Laravel

public function handleUpload() 
    { 
     $user = Auth::user(); 
     $username = $user->username; 
     $userId = $user->id; 
     $path_to_users = "users"; 
     $user_profile_img = 'users/'.$username.$userId.'/'.$username.'image001.jpg'; 
     $user_path_profile = "users/$username$userId"; 
     $user_image_name = $username.'image001.jpg'; 
     if(file_exists($path_to_users)) 
     { 
      if(file_exists("$user_path_profile")){ 
       $file = Input::file('profile')->move("$user_path_profile/", $user_image_name); 
      } else { 
      mkdir("$user_path_profile"); 
      $file = Input::file('profile')->move("$user_path_profile/", $user_image_name); 
     } 

     } else { 
      mkdir("users"); 
      mkdir("$user_path_profile"); 
      $file = Input::file('profile')->move("$user_path_profile/", $user_image_name); 
     } 
    } 

當我死了(的var_dump(輸入::文件(「曲線」)))返回null,這意味着它基本上不會在我的文件以作爲一個實際的文件。當我死了(var_dump(Input :: get('profile')))它返回圖像名稱,意思是我的上傳腳本正在工作,但Laravel後端失敗。這是真的,還是我錯過了什麼?

這裏是我的HTML形式的東西:

@if($user->id == $userProf->id) 

          <div class="fileUpload button-success pure-button"> 
           <span>Upload</span> 
           <form action="{{action('[email protected]')}}" method="POST" enctype="multipart/form-data"> 
            <input type="file" name="profile" class="upload" /> 

           </form> 
          </div> 
          @endif 
+0

你可以在這裏發佈你的上傳表單HTML代碼嗎? –

+0

我想你使用PUT方法上傳,Laravel根本無法處理文件請求,使用POST方法上傳文件。 –

回答

70

我在一個正常的形式有同樣的問題。我忘了補充:

enctype="multipart/form-data" 
3

看你的代碼,它應該工作,所以看起來你在別的有問題,甚至你的看法。我剛建的兩個路由器在這裏測試:

Route::post('file', function() { 

    echo "<pre>"; 
    var_dump(Input::file('profile')); 
    echo "</pre>"; 

}); 

Route::get('upload', function() { 

    return Form::open(array('url' => '/file', 'files' => true)) . 
      Form::file('profile') . 
      Form::submit('upload'); 

}); 

你可以把它們作爲基線,一步一步,讓你的工作太。

26

我有同樣的問題,並意識到我在表格中遺漏了一些東西。使用內置的laravel格式,因爲它會自動添加CRSF保護(請參閱http://laravel.com/docs/html)。反正 - 你需要添加'files' => true到窗體頂部 - 所以例如在刀片模板它可能看起來像:

{{ Form::open(array('route' => 'admin.store', 'class'=>'form-horizontal', 'files' => true)) }} 

{{Form::file('file')}} 

{{ Form::submit('Submit', array('class' => 'btn btn-info')) }} 

{{ Form::close() }} 
+0

很容易忘記這一點!文檔以供參考:http://laravel.com/docs/4.2/html#file-input – haakym

+0

我已經做了兩次了,這篇文章已經救了我兩次,謝謝@Andrew – haakym

+0

@安德魯你能解釋我可能能夠在一個正常的HTML形式做到這一點?我重複使用舊的HTML並將其與laravel框架混合起來,我不能從已經存在的代碼中更改太多(jquery使用表單ID創建彈出窗口,我是否可以將一個ID添加到laravel生成的窗體或者我可以將'files'=> true添加到標準html

標記中? –