我一直在写一个上传脚本,即使我使用Laravel内置函数Input::file(),它仍然返回null。我将发布我的Home Controller代码。
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(Input::file('profile')))返回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('HomeController@handleUpload')}}" method="POST" enctype="multipart/form-data">
<input type="file" name="profile" class="upload" />
</form>
</div>
@endif
我有一个正常形式的相同问题。我忘了加上:
enctype="multipart/form-data"
我也有同样的问题,并意识到我在表单中遗漏了一些东西。使用内置的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() }}
看看你的代码,它应该工作,所以它看起来你有一个问题在其他任何地方,甚至你的视图。我只构建了两个路由器来测试它:
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');
});
您可以使用它们作为基线,一步一步地使您的工作
确保在php.ini
文件中启用file uploads
:
file_uploads = On
我也有同样的情况。
我有同样的问题,并意识到我遗漏了一些东西。确保您的表单已启用上载文件。因此,请检查是否设置了以下属性。添加CRSF保护。然而,你需要添加'files' =>True到表单的顶部,并且再次确保你的标签包含enctype="multipart/form-data"