我用谷歌搜索并看到有一些插件可以做到这一点。但是不想使用插件,因为我唯一的问题是这个。通过Yii可以在会话变量中获取有关上传文件进度的数据吗?我正在制作一个使用php和Yii框架的系统。我正在构建一个上传文件的模块。除了进度条的显示外,一切都很完美。
我研究并发现PHP 5.4的版本具有前瞻性能力:会话上传进度(http://php.net/manual/en/session.upload-progress.php)
我在php.ini中启用了此设置。我正在使用文件上传插件来协助客户端执行文件上传。 (github.com/blueimp/jQuery-File-Upload)
我想运行以下代码:
客户方:
$('#fileupload').bind('fileuploadsend', function(e, data) {
// This feature is only useful for browsers which rely on the iframe transport:
if (data.dataType.substr(0, 6) === 'iframe') {
// Set PHP's session.upload_progress.name value:
var progressObj = {
name : 'PHP_SESSION_UPLOAD_PROGRESS',
value : (new Date()).getTime()
// pseudo unique ID
};
data.formData.push(progressObj);
// Start the progress polling:
data.context.data('interval', setInterval(function() {
$.get(yii.baseUrl + '/atl/default/progressUpload', $.param([progressObj]), function(result) {
// Trigger a fileupload progress event,
// using the result as progress data:
e = $.Event('progress', {
bubbles : false,
cancelable : true
});
$.extend(e, result);
($('#fileupload').data('blueimp-fileupload') || $('#fileupload').data('fileupload'))._onProgress(e, data);
}, 'json');
}, 1000)); // poll every second
}
}).bind('fileuploadalways', function(e, data) {
clearInterval(data.context.data('interval'));
});
$('#fileupload').fileupload({
dataType : 'json',
axFileSize : 500000000,
forceIframeTransport : true,
add : function(e, data) {
data.context = $('<button/>').text('Upload').appendTo(document.body).click(function() {
data.context = $('<p/>').text('Uploading...').replaceAll($(this));
data.submit();
});
},
done : function(e, data) {
alert("done!");
},
progressall : function(e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
console.log(e, data, progress);
$('#progress .bar').css('width', progress + '%');
}
});
服务器端:
public function actionProgressUpload($PHP_SESSION_UPLOAD_PROGRESS) {
$s = Yii::app()->session['upload_progress_'.intval($PHP_SESSION_UPLOAD_PROGRESS)];
$progress = array(
'lengthComputable' => true,
'loaded' => $s['bytes_processed'],
'total' => $s['content_length']
);
echo json_encode($progress);
}
我的问题:
$ _SESSION变量中的Yii始终返回null,变量Yii :: app() - &gt; session不会返回上传进度的值。
我用谷歌搜索并看到有一些插件可以做到这一点。但是不想使用插件,因为我唯一的问题是这个。通过Yii可以在会话变量中获取有关上传文件进度的数据吗?
感谢。
答案 0 :(得分:1)
保护/配置/ main.php
检查main config
中的会话是否设置为false。如果是这样我就不会工作
'session' => array (
'autoStart' => false,
),