Laravel 4 图片上传 returns 空
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()
returnsNULL
。
如果我在路线中将 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
编辑
Input::all()
上的 var_dump()
在 Chrome 开发者工具中给出:
预览选项卡:
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] );
如果同一页面上有两个或更多表单(我就是这种情况),则需要使用 [0]
从 jQuery 数组中获取表单元素(取决于表单position) 否则将无法正常工作...
我希望它能帮助其他人不要像我今天那样浪费那么多时间。
我有一个 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()
returnsNULL
。
如果我在路线中将 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
编辑
Input::all()
上的 var_dump()
在 Chrome 开发者工具中给出:
预览选项卡:
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] );
如果同一页面上有两个或更多表单(我就是这种情况),则需要使用 [0]
从 jQuery 数组中获取表单元素(取决于表单position) 否则将无法正常工作...
我希望它能帮助其他人不要像我今天那样浪费那么多时间。