Php 带有Plupload的Laravel 4 TokenMissMatchException异常
我试图用Plupload上传文件,但我总是遇到异常Php 带有Plupload的Laravel 4 TokenMissMatchException异常,php,laravel,laravel-4,csrf,plupload,Php,Laravel,Laravel 4,Csrf,Plupload,我试图用Plupload上传文件,但我总是遇到异常 // Route Route::post("/posts/gallery", "PostsController@uploadGallery"); // Controller action public function uploadGallery(){ $file = Input::file('file'); $destinationPath = public_path() . '/imgs';
// Route
Route::post("/posts/gallery", "PostsController@uploadGallery");
// Controller action
public function uploadGallery(){
$file = Input::file('file');
$destinationPath = public_path() . '/imgs';
$extension = $file->getClientOriginalExtension();
$filename = "post-" . str_random(12) . "." . $extension;
$inFile = $file->getRealPath();
$outFile = public_path() . "/imgs/" . $filename;
$image = new Imagick($inFile);
$image->thumbnailImage(550, 0);
if($image->writeImage($outFile)){
return Response::json(["response" => "ok", "img" => $filename]);
}else{
return Response::json(["response" => "error"]);
}
}
这是我试图解决的问题。我试图向请求添加\u令牌
,但它没有接收到:
$("#uploader").pluploadQueue({
runtimes : 'html5,flash,silverlight,html4',
url : "{{ URL::action('PostsController@uploadGallery') }}",
chunk_size: '1mb',
rename : true,
dragdrop: true,
filters : {
max_file_size : '3mb',
mime_types: [
{title : "Image files", extensions : "jpg,gif,png"},
]
},
resize : {width : 320, height : 240, quality : 90},
flash_swf_url : "<?php echo public_path() . '/js/Moxie.swf'; ?>",
silverlight_xap_url : "<?php echo public_path() . '/js/Moxie.xap'; ?>",
prevent_duplicates: true,
multipart_params : {
"_token" : $("[name=_token]").val()
}
});
有人能帮我吗
更新:
用于上载文件的Html表单:
<div class="imageGallery">
{{ Form::open() }}
<div id="uploader">
<p>Your browser doesn't have Flash, Silverlight or HTML5 support.</p>
</div>
{{ Form::close() }}
</div>
{{Form::open()}}
您的浏览器不支持Flash、Silverlight或HTML5
{{Form::close()}}
//隐藏输入字段
<input type="hidden" value="VJRUpvq92oYxCsNHVBi5TqqkU6I6CQayay6x7L0m" name="_token">
如果上传是通过ajax完成的,则您的
csrf
过滤器希望令牌位于“x-csrf-token”标题中,而不是输入中
不要将令牌添加到多部分参数
,而是尝试将其添加到标题
:
$("#uploader").pluploadQueue({
runtimes : 'html5,flash,silverlight,html4',
url : "{{ URL::action('PostsController@uploadGallery') }}",
chunk_size: '1mb',
rename : true,
dragdrop: true,
filters : {
max_file_size : '3mb',
mime_types: [
{title : "Image files", extensions : "jpg,gif,png"},
]
},
resize : {width : 320, height : 240, quality : 90},
flash_swf_url : "<?php echo public_path() . '/js/Moxie.swf'; ?>",
silverlight_xap_url : "<?php echo public_path() . '/js/Moxie.xap'; ?>",
prevent_duplicates: true,
headers: {
"x-csrf-token" : $("[name=_token]").val()
}
});
可以找到有关属性选择器的CSS3文档。尽管有些浏览器不使用引号,但它们提供的示例显示了所引用的选择器值。即使使用新的编解码器,我也会遇到与以前相同的错误。是否可以使用csrf筛选器中的调试信息更新问题?上传完成后,
Request::ajax()
,Request::header('x-csrf-token')
,Input::get('u-token')
,$token
,和Session::token()
的值是什么?我得到了TokenMismatchException$令牌为空,而会话::令牌()包含token@Alen$token
为空,但为什么?这是不是一个ajax调用?请求是否包含标头?在javascript中,$(“[name=\u token]”).val()是否实际返回值?$(“[name=\u token]”。val()返回空字符串。是的,它是ajax callDoesconsole.log($((“输入[name=\u令牌])).val())
返回什么?我问这个问题只是因为选择器在我看来不可靠(但我可能是在想象),不,它不会返回任何东西。我还尝试在Firebug控制台中执行$(“input[name=_token]”).val(),但仍然无效。现在这真的很奇怪。。。我能想到的唯一一件事是,您遇到了其他一些错误,这些错误阻止了任何其他JS的运行。加载页面/发出请求时控制台中有任何内容吗?$(“[name=”u-token']”)或$([input[name=”u-token'])
如何。您是否查看了页面的源代码以确保输入确实存在?确保它不在您忘记包含的部分中,或者某个地方没有出于某种原因删除该元素的javascript。$($(“input[name=''U token'])正在工作。谢谢你,帕特里克斯
$("#uploader").pluploadQueue({
runtimes : 'html5,flash,silverlight,html4',
url : "{{ URL::action('PostsController@uploadGallery') }}",
chunk_size: '1mb',
rename : true,
dragdrop: true,
filters : {
max_file_size : '3mb',
mime_types: [
{title : "Image files", extensions : "jpg,gif,png"},
]
},
resize : {width : 320, height : 240, quality : 90},
flash_swf_url : "<?php echo public_path() . '/js/Moxie.swf'; ?>",
silverlight_xap_url : "<?php echo public_path() . '/js/Moxie.xap'; ?>",
prevent_duplicates: true,
headers: {
"x-csrf-token" : $("[name=_token]").val()
}
});
$("input[name='_token']").val()