如何使用$ .ajax上传Laravel图像(jQuery ajax)
问题描述:
我想通过AJAX Laravel(jquery ajax)发送图像上传。总是收到空的$ _FILES数组。我在表单中添加了enctype =“multipart/form-data当我通过Laravel的post方法发送数据时,我得到了我的数据,这不适用于jquery ajax,我得到的是其他事情的ajax响应$ _FILES。
我查看文件
<form action="" name="myForm_comment" id="myForm" method="post" role="form" enctype="multipart/form-data">
<input type="hidden" name="snap" id="snap" value="">
<input type="hidden" name="op" id="op" value="">
<input type="hidden" name="ucname" id="name" value="{{$fname}} {{$lname}}">
<textarea rows="3" class="form-control" placeholder="Add a public comment" style="padding:10px;" name="ucmsg" id="textmsg" required></textarea>
<input type="file" id="imgInp" name="imgInp"/>
<img id="blah" src="" alt="" />
<div class="row">
<div class="col-xs-1 col-xs-offset-8 text-center">
<label for="imgInp"><i class="fa fa-camera-retro" aria-hidden="true"></i></label>
</div>
<!-- <div class="col-xs-1 text-center">
<label for="imgInp"><i class="fa fa-smile-o" aria-hidden="true"></i></label>
</div> -->
<div class="col-md-2">
<input type="submit" id ="cmnt_btn" class="btn btn-primary pull-right" name="commentSubmit" value="Comment" onclick="commentFunction();">
</div>
</div>
</form>
<script>
$(document).ready(function(){
//comment database management
$("#cmnt_btn").click(function(){
var name = $("#name").val();
var textmsg = $("#textmsg").val();
var picture = $("#imgInp").val();
$.ajax({
url:'comment_dbm',
type:'get',
data:{
ucname:name,
ucmsg:textmsg,
ucpic:picture,
},
success:function(response)
{
alert(response);
}
});
});
});
</script>
我的控制器
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
use DB;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Session;
use Illuminate\Contracts\Validation\Validator;
use Mail;
session_start();
class CommentController extends Controller
{
public function comment_dbm()
{
echo $ucname = $_GET['ucname'];
$ucmsg = $_GET['ucmsg'];
$cmnt_pic = $_GET['cmnt_pic']; //I am getting these values response
print_r($_FILES); // getting empty array
]);
}
}
我的路线文件(即web.php)
Route::get('/comment_dbm', [
'uses' => '[email protected]_dbm',
'as' => 'comment_dbm'
]);
答
您不能使用session_start()
或$_GET
。更好地使用内置的Session
和Request
类。此外,您无法通过GET请求传输数据(如图像)。使用POST一个。
然后你就可以按照答案here
[Laravel 5阿贾克斯文件/图像上传(的可能的复制https://stackoverflow.com/questions/32367132/laravel-5-ajax-file-image-upload ) – manniL