Laravel 4 图像上传返回空值


Laravel 4 image upload returns null

我有一个Laravel表单,允许通过Ajax调用上传文件:

{{ Form::open(array('url' => 'upload/image', 'files' => true, 'id' => 'profile-form')) }}
{{ Form::file('avatar', $attributes = array( 'id' => 'file-avatar', 'style' => 'display:none' )) }}
{{ Form::close() }}

和一条路线:

Route::post('upload/image', function(){
    echo "<pre>";
    var_dump(Input::file('avatar'));
    echo "</pre>";
});

实际上,var_dump()返回NULL。如果我在路由中将Input::file('avatar')替换为$_FILES,则会在 Chrome 开发者工具中得到以下结果:

预览选项卡:

undefined: {undefined: 2041196, 4371.jpg: ["type"], image/jpeg: ["tmp_name"],…}
4371.jpg: ["type"]
0: "type"
/var/www/clients/client1/web3/tmp/phpmoigFb: ["error"]
0: "error"
image/jpeg: ["tmp_name"]
0: "tmp_name"
undefined: 2041196

响应选项卡:

<pre>array(1) {
  [0]=>
  array(5) {
    ["name"]=>
    string(8) "4371.jpg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(43) "/var/www/clients/client1/web3/tmp/phpmoigFb"
    ["error"]=>
    int(0)
    ["size"]=>
    int(2041196)
  }
}
</pre>

我错过了什么?

我正在使用:

php artisan --version
Laravel Framework version 4.2.16

还有我的php.ini:

file_uploads = On
upload_max_filesize = 8M
max_file_uploads = 20

编辑

Chrome 开发者工具中提供了关于Input::all() var_dump()

预览选项卡:

undefined: {undefined: 9, 2789.jpg: ["mimeType"], image/jpeg: ["size"],…}
2789.jpg: ["mimeType"]
0: "mimeType"
/var/www/clients/client1/web3/tmp/php9MJkdO: ["fileName", "SplFileInfo"]
0: "fileName"
1: "SplFileInfo"
image/jpeg: ["size"]
0: "size"
undefined: 9

响应选项卡:

<pre>array(1) {
  [0]=>
  object(Symfony'Component'HttpFoundation'File'UploadedFile)#9 (7) {
    ["test":"Symfony'Component'HttpFoundation'File'UploadedFile":private]=>
    bool(false)
    ["originalName":"Symfony'Component'HttpFoundation'File'UploadedFile":private]=>
    string(8) "2789.jpg"
    ["mimeType":"Symfony'Component'HttpFoundation'File'UploadedFile":private]=>
    string(10) "image/jpeg"
    ["size":"Symfony'Component'HttpFoundation'File'UploadedFile":private]=>
    int(1860197)
    ["error":"Symfony'Component'HttpFoundation'File'UploadedFile":private]=>
    int(0)
    ["pathName":"SplFileInfo":private]=>
    string(43) "/var/www/clients/client1/web3/tmp/php9MJkdO"
    ["fileName":"SplFileInfo":private]=>
    string(9) "php9MJkdO"
  }
}
</pre>

好吧,我将回答我自己的问题,如果它不够相关,我很抱歉,因为我忘记提供 Javascript 代码。

问题出在此行:

var data = new FormData( $( '#profile-form')[0] );

如果您在同一页面上有两个或更多表单(对我来说就是这种情况),您需要从 jQuery 数组中获取表单元素,[0](取决于表单位置),否则它将无法正常工作......

我希望它能帮助其他人不要像我今天那样浪费那么多时间。