通过Laravel使用PHP会话上载进度
我想在不使用第三方插件的情况下向用户展示上传进度,我知道PHP5.4能够通过会话报告上传进度。不幸的是,Laravel4.2不使用本机PHP会话,所以我如何才能让它工作呢 我尝试将session_start()放在所有相关页面(upload form页面、post页面和upload progress页面)的控制器方法的顶部。我使用的upload progress函数只是将会话作为json对象返回,但我在使用ajax时得到的是一个空对象。下面是一些代码: 在控制器中:通过Laravel使用PHP会话上载进度,php,session,laravel,upload,progress,Php,Session,Laravel,Upload,Progress,我想在不使用第三方插件的情况下向用户展示上传进度,我知道PHP5.4能够通过会话报告上传进度。不幸的是,Laravel4.2不使用本机PHP会话,所以我如何才能让它工作呢 我尝试将session_start()放在所有相关页面(upload form页面、post页面和upload progress页面)的控制器方法的顶部。我使用的upload progress函数只是将会话作为json对象返回,但我在使用ajax时得到的是一个空对象。下面是一些代码: 在控制器中: public functio
public function test(){
session_start();
return View::make('admin.test');
}
public function postTest(){
session_start();
}
public function getTestProgress(){
session_start();
$key = ini_get("session.upload_progress.prefix") . "fileupload";
return Response::json($_SESSION);
}
我的测试视图:
@extends('layouts.master')
@section('head')
<style type="text/css">
#barBlank {
border: solid 1px #fff;
height: 20px;
width: 300px;
}
#barColor {
background-color: yellow;
height: 20px;
width: 0px;
}
#barBlank, #hiddenUploadIframe {
display: none;
}
</style>
@stop
@section('header')
@stop
@section('content')
<div id="barBlank">
<div id="barColor"></div>
</div>
<div id="status"></div>
{{ Form::open( ['action' => 'MyController@postTest', 'id' => 'fileUpload', 'files' => true, 'target'=>'hiddenUploadIframe'] ) }}
<input type="hidden" value="fileupload" name="{{ ini_get('session.upload_progress.name') }}">
<input type="file" name="userfile"><br>
<input type="submit" value="Start Upload">
{{ Form::close() }}
<iframe id="hiddenUploadIframe" name="hiddenUploadIframe" src="about:blank"></iframe>
@stop
@section('footer')
@stop
@section('footerjs')
<script type="text/javascript">
function sendRequest(){
$.get("{{ action('MyController@getTestProgress') }}", function(data){
console.log(data);
var progress = data.upload_progress_fileupload;
var percent = Math.round((progress.bytes_processed / progress.content_length)*100);
$('#barColor').width(percent+'%');
$('#status').html(percent+'%');
if( percent < 100 ){
setTimeout(sendRequest(), 100);
}
else{
$('#barBlank').hide();
$('#status').html('Done.');
}
});
}
$('#fileUpload').submit(function(){
$('#barBlank').css('display', 'block');
setTimeout(sendRequest(), 100);
})
</script>
@stop
@extends('layouts.master'))
@第节(“标题”)
#杠铃{
边框:实心1px#fff;
高度:20px;
宽度:300px;
}
#巴色{
背景颜色:黄色;
高度:20px;
宽度:0px;
}
#barBlank,#hiddenUploadIframe{
显示:无;
}
@停止
@节(“标题”)
@停止
@节(“内容”)
{{Form::open(['action'=>'MyController@postTest“,”id'=>”fileUpload“,”files'=>true,“target'=>”hiddenhuploadiframe'])}
{{Form::close()}}
@停止
@节(“页脚”)
@停止
@节('footerjs')
函数sendRequest(){
$.get(“{{action('MyController@getTestProgress“)}”,函数(数据){
控制台日志(数据);
var progress=data.upload\u progress\u fileupload;
变量百分比=数学轮((progress.bytes\u processed/progress.content\u length)*100);
$('#barColor')。宽度(百分比+'%”);
$('#status').html(百分比+'%');
如果(百分比<100){
setTimeout(sendRequest(),100);
}
否则{
$('#barBlank').hide();
$('#status').html('Done');
}
});
}
$('#fileUpload')。提交(函数(){
$('#barBlank').css('display','block');
setTimeout(sendRequest(),100);
})
@停止
您可以使用jquery ajax并节省时间。