我有这个HTML表单:
<form action="{{ route('send_form') }}" method="post" class="send_form" enctype="multipart/form-data">
<input type="hidden" name="_token" class='token' value="{{ csrf_token() }}" />
<input type="text" id="fullname" name="fullname" placeholder="" >
<input type="file" id="myfile" name="myfile" />
<button>Send</button>
</form>
我想通过ajax上传文件,原因如下:
$(".send_form").submit(function(e) {
e.preventDefault();
$this = $(this);
var $form = $( this),
url = $form.attr( "action");
$.ajax({
url: url, //Server script to process data
type: 'POST',
headers: { 'X-CSRF-TOKEN':$form.find('.token').val() },
// Form data
data: new FormData($form[0]),
cache: false,
contentType: 'json',
processData: false,
//Ajax events
success: function( data ) {
conosle.log('yesss');
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR, textStatus, errorThrown);
}
});
return false;
});
我可以看到通过Chrome开发工具中的Request有效负载发送的文件:
------WebKitFormBoundaryBXAYgtRKJjEyH6NP
Content-Disposition: form-data; name="myfile"; filename="01.png"
Content-Type: image/png
在我的Laravel控制器中,我无法获得任何原因的输入。 Input::all()
返回为空,Request::instance()->all()
为空,Input::get('fullname')
为空。
在我的控制器代码的开头,我有这一切:
namespace App\Http\Controllers;
use App\Http\Requests;
use Request;
use Response;
use Carbon\Carbon;
use Illuminate\Support\Facades\Redirect;
use Lang;
use Validator;
use Input;
我该怎么办?
由于
答案 0 :(得分:1)
假设文件实际上传(见下文),您不会像普通输入那样访问它。有一种访问名为ParseQuery<ParseObject> query = ParseQuery.getQuery("UserView");
query.whereEqualTo("objectId", id);
List<ParseObject> parseObjects = query.find();
if (parseObjects.size() == 0)
status = true;
else {
status = false;
for (ParseObject object : parseObjects) {
String name= object.get("name").toString();
}
}
return status;
的文件的特殊方法。所以file
就是你想要的。
在没有像Blueimp这样的第三方回退的情况下进行AJAX文件上传时要小心。看起来大多数现代浏览器现在支持它,但IE 8和9不支持,IE 10和11不支持\Request::instance()->file('myfile')
。移动设备(Android 4.4及以下版本,Opera Mini)的支持也受到限制。 (Source +一些有趣的错误修复)