scriptData не передается, когда есть несколько экземпляров uploadify - PullRequest
3 голосов
/ 15 декабря 2010

У меня есть два случая загрузки в мою форму.Вы найдете определения ниже.

И две кнопки, которые запускают загрузку.Кнопка с изображением - единственная, имеющая отношение к вопросу:

$( "#btnimageupload" ).button().click(function()
{
 $('#picbrowse').uploadifySettings( 'scriptData', ({ 'isSelected': $( '#selectImage' ).val() }));
 $('#picbrowse').uploadifyUpload();
});

Теперь, вот проблема:

Когда я нажимаю кнопку btnimageupload, изображение незагрузить.Прогрессбар идет до 100 и останавливается.Нет ошибок, JavaScript или иным образом.

Но , когда я отключаю поле ввода файла vdobrowse и соответствующий ему скрипт, все работает нормально.Изображения загружаются и данные передаются.

Вот сложная часть ... если я не передам scriptData в обработчик кликов btnimageupload, изображения будут загружены даже с полем ввода файла vdobrowse на странице.

Так что мне кажется, что scriptData нарушает загрузку, когда на странице имеется более одного экземпляра загрузки.

Кто-нибудь знает, как я могу решить эту проблему?* Загрузить определения

$('#picbrowse').uploadify(
{
 uploader  : 'script/uplodify/uploadify.swf',
 script    : '../../dopost.php',
 cancelImg : 'script/uplodify/cancel.png',
 folder    : '/images',
 queueID   : 'picqueue',
 auto      : false,
 multi     : true,
 fileDesc    : 'Image Files',
 fileExt     : '*.gif;*.jpg;',
 queueSizeLimit: 5,
 scriptData:
 ({
  'action': 'upload_image',
 }),
 onComplete: function( event, queueID, fileObj, response, data )
 {
  console.log( reponse)
 }
});

.

$('#vdobrowse').uploadify(
{
 uploader  : 'script/uplodify/uploadify.swf',
 script    : '../../dopost.php',
 cancelImg : 'script/uplodify/cancel.png',
 folder    : '/video',
 queueID   : 'vdoqueue',
 auto      : false,
 multi     : true,
 fileDesc    : 'Video Files',
 fileExt     : '*.avi;*.mpg;*.mov;*.mp4;*.mpeg;*.flv;*.mkv;*.wmv',
 queueSizeLimit: 5,
 scriptData:
 {
  action: 'upload_video'
 },
 onComplete: function( event, queueID, fileObj, response, data )
 {
  console.log( response );
 }

});

Ответы [ 3 ]

1 голос
/ 21 декабря 2010

Учитывая, что на странице scriptData и нескольких Uploadifys есть ограничение, вы можете пропустить атрибуты scriptData и folder, проанализировать типы файлов внутри dopost.php и предпринять действия на их основе.

Например:

$fileParts  = pathinfo($_FILES['Filedata']['name']);
$extension = strtolower($fileParts['extension']);
switch($extension){
    case "gif" | "jpg":
        // Do Image Upload Action
    break;
    case "avi" | "mpg" | "mov" | "mp4" | "mpeg" | "flv" | "mkv" | "wmv":
        // Do Video Upload Action
    break;
}
1 голос
/ 25 декабря 2010

Я получаю scripData просто отлично, я сделал пример на моем веб-сайте
Я ограничил размер загрузки до 500 КБ по понятным причинам и исправил код:

$('#picbrowse').uploadify(
{
    uploader  : 'uploadify.swf',
    script    : 'uploadify.php',
    cancelImg : 'cancel.png',
    folder    : 'uploads/images',
    queueID   : 'picqueue',
    auto      : false,
    multi     : true,
    removeCompleted : false,
    fileDesc    : 'Image Files',
    fileExt     : '*.gif;*.jpg',
    sizeLimit   : 512000,
    queueSizeLimit: 5,
    scriptData: {action: 'upload_image'},
    onComplete: function( event, queueID, fileObj, response, data )
    {
        $ul.html('');
        var json = jQuery.parseJSON(response);
        $.each(json,function(k,v){
            var li = "<li>"+k+": "+v+"</li>";
            $ul.append(li);
        });
    },
    onError: function (event,ID,fileObj,errorObj) {
        console.log(errorObj.type + ' Error: ' + errorObj.info);
    }
});

$('#vdobrowse').uploadify(
{
    uploader  : 'uploadify.swf',
    script    : 'uploadify.php',
    cancelImg : 'cancel.png',
    folder    : 'uploads/video',
    queueID   : 'vdoqueue',
    auto      : false,
    multi     : true,
    sizeLimit   : 512000,
    fileDesc    : 'Video Files',
    fileExt     : '*.avi;*.mpg;*.mov;*.mp4;*.mpeg;*.flv;*.mkv;*.wmv',
    queueSizeLimit: 5,
    scriptData: {action: 'upload_video'},
    onComplete: function( event, queueID, fileObj, response, data )
    {
        $ul.html('');
        var json = jQuery.parseJSON(response);
        $.each(json,function(k,v){
            var li = "<li>"+k+": "+v+"</li>";
            $ul.append(li);
        });
    }

});

И я использую стандартный uploadify.php и отображаю вместо него переменную POST:

echo json_encode($_POST);
1 голос
/ 19 декабря 2010

Плагин, похоже, помещает параметры в глобальное пространство, поэтому, когда вы используете два или более загружаемых файла с scriptData, он выбирает последнее сохраненное значение в scriptData.выполнение двух загрузок на одной странице - бессмысленное упражнение, и поэтому я никогда не проверяю функциональность с несколькими загрузками.uploadifySettings отлично работает с одним uploadify.Несколько загрузок - это демонстрационная страница, демонстрирующая различные возможные установки.

Тем не менее, это, очевидно, проблема для пользователей, и мы должны исправить ее для тех, кто хочет использовать несколько загрузок на одной странице.

Forum

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

...