【发布时间】:2017-12-20 11:12:36
【问题描述】:
有一个奇怪的问题,我确信这与我的脚本获取文件输入字段值的方式有关。
我知道控制器功能有效,因为我已经能够通过手动提交表单而不使用 ajax 来做到这一点。
我也知道 ajax 在发送和接收请求时有效,因为我通过修改它来来回解析一个有效的字符串来测试它。
此外,我可以看到脚本正在抓取文件,因为当我选择文件时,它会在控制台中显示所选文件。
在我的浏览器中出现 500 错误,而在 Laravel 中我只得到这个:
Symfony\Component\Debug\Exception\FatalThrowableError: 在 C:\123\app\Http\Controllers\MyController.php:156 中的字符串上调用成员函数 getClientOriginalExtension()
我尝试将控制器更新为使用 Request->logo,但没有成功。
查看:
<form enctype="multipart/form-data" class="form-horizontal" method="POST" action="{{ url('studio/uploadLogo') }}">
{{ csrf_field() }}
<div class="form-group{{ $errors->has('studioname') ? ' has-error' : '' }}">
<label for="imageInput" class="col-md-4 control-label">Logo</label>
<div class="col-md-6">
<input data-preview="#preview" name="logo" type="file" id="imageInput">
<img id="preview" src="" style="display: none"></img>
<input class="form-control" type="submit">
</div>
</div>
</form>
脚本:
$('#imageInput').change(function (e) {
e.preventDefault();
var logo = $('#imageInput').val();
console.log(logo);
$.ajax({
type: "POST",
url: '/studio/uploadLogo',
data: {logo: logo},
success: function( data ) {
console.log(data);
}
});
});
控制器:
public function uploadLogo() {
$file = Input::file('logo')->getRealPath();
$photoName = str_random(20) . '.' . Input::file('logo')->getClientOriginalExtension();
Input::get('logo')->move(public_path('avatars'), $photoName);
$response = array(
'status' => 'success',
'data' => $photoName
);
return \Response::json($response);
}
路线:
Route::post('/studio/uploadLogo', 'MyController@uploadLogo');
Route::get('/studio/uploadLogo', 'MyController@uploadLogo');
【问题讨论】:
-
检查 url 路径是否正确。
url: '/studio/uploadLogo', -
更新帖子以包括路线@BilalAhmed
-
您可以通过这种替代方式获取文件扩展名。(即stackoverflow.com/questions/38403558/…)
-
我认为不对,您的链接用于获取已上传的文件 - 我无法处理上传。
-
在您的 uploadLogo() 函数中删除所有代码并返回成功消息并让我知道您是否能够获得成功消息?
标签: javascript php ajax laravel