Как работает SWFUpload? - PullRequest
       44

Как работает SWFUpload?

2 голосов
/ 24 февраля 2011

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

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

В основном я пытаюсь сделать это:

  1. Пользователь заполняет форму значениями (т. Е. Заполняет текстовый ввод, поля текстовой области)
  2. Пользователь выбирает файл с помощью SWFUpload
  3. Пользователь отправляет форму

Можно ли подключить файл к элементу ввода файла в форме, чтобы при отправке формы вручную все значения отправлялись за один раз?

Насколько я знаю, SWFUpload используется для самостоятельной отправки файла в фоновом режиме ... Можно ли сделать это вручную и в одной форме?

     $('.swfupload-control').swfupload({

        // File Upload Settings
        file_size_limit : "102400", // 100MB
        file_types : "*.*",
        file_types_description : "All Files",
        file_upload_limit : "10",
        file_queue_limit : "0",

        // Button Settings
        button_image_url : "/images/upload_song.gif", // Relative to the SWF file
        button_placeholder_id : "spanButtonPlaceholder",
        button_width: 186,
        button_height: 32,

        // Flash Settings
        flash_url : "/javascripts/swfupload/swfupload.swf"

    });


    $('.swfupload-control')
        .bind('swfuploadLoaded', function(event){
            $('#log').append('<li>Loaded</li>');
        })
        .bind('fileQueued', function(event, file){
            $('#log').append('<li>File queued - '+file.name+'</li>');

          //$('#song_attachment').val(file);

          $('#update-media').parents('li').find('p').remove();
          $('#update-media').parents('li').append('<p>'+(file.name.length >= 45 ? file.name.substr(0, 45) + '...' : file.name)+'</p>');
            // start the upload since it's queued
            //$(this).swfupload('startUpload');
        })
        .bind('fileQueueError', function(event, file, errorCode, message){
            $('#log').append('<li>File queue error - '+message+'</li>');
        })
        .bind('fileDialogStart', function(event){
            $('#log').append('<li>File dialog start</li>');
        })
        .bind('fileDialogComplete', function(event, numFilesSelected, numFilesQueued){
            $('#log').append('<li>File dialog complete</li>');
        })
        .bind('uploadStart', function(event, file){
            $('#log').append('<li>Upload start - '+file.name+'</li>');
        })
        .bind('uploadProgress', function(event, file, bytesLoaded){
            $('#log').append('<li>Upload progress - '+bytesLoaded+'</li>');
        })
        .bind('uploadSuccess', function(event, file, serverData){
            $('#log').append('<li>Upload success - '+file.name+'</li>');
        })
        .bind('uploadComplete', function(event, file){
            $('#log').append('<li>Upload complete - '+file.name+'</li>');
            // upload has completed, lets try the next one in the queue
            $(this).swfupload('startUpload');
        })
        .bind('uploadError', function(event, file, errorCode, message){
            $('#log').append('<li>Upload error - '+message+'</li>');
        });

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Нет, невозможно подключить SWFUpload к полю файла.

Браузеры традиционно не разрешают доступ Javascript к файловой системе пользователя (в разработке есть API).SWFUpload позволяет обойти это, используя Flash API для чтения файла непосредственно из файловой системы пользователя и его потоковой передачи на сервер.Для этого Flash необходимы прямые дескрипторы к файлам в файловой системе, которые он не может получить через файл ввода или Javascript.

Firefox имеет некоторую поддержку API файлов Javascript, см. https://developer.mozilla.org/en/using_files_from_web_applications

1 голос
/ 24 февраля 2011

Извините, я не знаю SWF Upload и готов удалить этот ответ, если он не имеет значения ... НО:

Я сделал два приложения здесь: https://github.com/apneadiving/Pic-upload---Crop-in-Ajax

Одно с Uploadify и один с jQuery-File-Upload .

Они оба отвечают вашим потребностям (отправка ajax, загрузка нескольких файлов).Я бы порекомендовал загрузить файл Jquery, потому что он не требует флэш-памяти.

Я также написал учебник здесь: https://github.com/blueimp/jQuery-File-Upload/wiki/jQuery-File-Upload-for-Rails-3

...