Yii框架和文件上传进度

时间:2014-03-10 12:19:22

标签: php yii

我用谷歌搜索并看到有一些插件可以做到这一点。但是不想使用插件,因为我唯一的问题是这个。通过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可以在会话变量中获取有关上传文件进度的数据吗?

感谢。

1 个答案:

答案 0 :(得分:1)

保护/配置/ main.php

检查main config中的会话是否设置为false。如果是这样我就不会工作

'session' => array ( 'autoStart' => false, ),