Почему Uploadify не работает со скриптом Codeigniter Controller? - PullRequest
0 голосов
/ 20 февраля 2012

Я полностью сбит с толку, так как не могу выяснить причину, почему это не работает. Приведенный ниже код прекрасно работает, когда я использую скрипт загрузки по умолчанию:

        $('#file_upload').uploadify({
        'uploader'  : '<?= base_url();?>js/uploadify/uploadify.swf',
        'script'    : '<?= base_url();?>js/uploadify/uploadify.php',
        'cancelImg' : '<?= base_url();?>js/uploadify/cancel.png',
        'queueID'   : 'upload_queue',
        'folder'    : '/ths/images/buildings/',//be sure to check this value on the production site to make sure it's relative to the site root
        'auto'      : false,
        'sizeLimit' : 1024000, 
        'multi'     : true,
        'removeCompleted': true,
        'fileExt'   : '*.jpg;*.gif;*.png;*.jpeg;',
        'fileDesc'  : 'Web Image Files (.JPG, .GIF, .PNG, .JPEG)',
        'onAllComplete' : function(event, data) {
                        /*Code to update the page with results*/
                    }
    });

Однако, как только я изменю сценарий на что-то вроде

'script' : '<?= base_url();?>image/upload'

Я получаю ответ об ошибке «HTTP 302 error», даже если все, что я делаю, это копирую содержимое сценария Uploadify по умолчанию в метод контроллера.

ПРИМЕЧАНИЕ. Я использую CodeIgniter с включенным mod_rewrite в файле .htaccess для удаления «index.php» из URL. Я также использую базу данных для управления сессией. Я не знаю, будет ли какая-либо из этой информации полезной, но я подумал, что я бы включил ее, поскольку они, похоже, были важными факторами в вопросах других людей.

1 Ответ

1 голос
/ 20 февраля 2012

Uploadify не передает информацию о текущем сеансе (потому что она основана на Flash), поэтому вы перенаправлены на ваш скрипт входа в систему.Если вы проверите свои файлы журнала, вы увидите, что пользовательский агент отличается от файла сообщения.Вам нужно будет обрабатывать авторизацию иначе, чем Uploadify, чтобы игнорировать обработчик сеанса по умолчанию и проверять параметр или другое значение.

Вы можете передать массив JSON для публикации вместе с запросом файла.Я использую что-то вроде следующего в моем файле конфигурации для загрузки:

// abreviated javascript to pass data via uploadify
$('#element').uploadify({
     'uploader' : '...',
     ...
     'scriptData' : {"user_id":"1", "user_id_sig":"xxxxx"},
     ...
     'onAllComplete' : function(){ ... }
});

Вы можете сгенерировать это с помощью:

// create the signature value
$a_secret_string = 'abc123';
print json_encode(array(
   'user_id' => $user_id,
   'user_id_sig' => md5($user_id . $a_secret_string),
));

В методе загрузки контроллера проверьте, что sig + user_idпроверьте значение и извлеките необходимую информацию о сеансе из БД в это время.

// check the signature value
$a_secret_string = 'abc123';
if(md5($_REQUEST['user_id'] . $a_secret_string) == $_REQUEST['user_id_sig']){
     // do the upload
} else {
     // handle the error
}
...