Почему я могу загрузить только один файл, используя Play и uploadify?

Я написал эту простую демонстрацию Play-uploadify.

Я хочу кнопку загрузки, которая автоматически загружает изображение при каждом нажатии.

Почему-то только при первом нажатии кнопки происходит загрузка. После того, как кнопка была нажата один раз, дальнейшие нажатия ничего не вызывают, если я не «отменю» предыдущие загрузки.

(Я не понимаю смысла отмены загрузки в режиме auto. Возможно, проблема в том, что мои загрузки в каком-то смысле никогда не «завершаются»?)

Вот мой метод действий:

public static void upload(File file, long userId){
    System.out.println("Uploaded file name " + file.getName() + 
      " by user " + userId);
}

И вызов для загрузки:

$(function() {
    $("#uploader").uploadify({
        uploader    : '/public/libraries/uploadify/uploadify.swf',
        script      : '/Application/upload',
        cancelImg   : '/public/libraries/uploadify/cancel.png',
        folder      : '/uploads',
        fileExt     : '*.jpg;*.gif;*.png',
        fileDesc    : 'Image Files',
        fileDataName: 'file',
        scriptData: {userId: 123},
        auto: true
    });
});

Кроме того, загрузка никогда не завершается — когда я добавляю обработчик onComplete, он не срабатывает.


person ripper234    schedule 24.01.2012    source источник


Ответы (2)


Проблема заключалась в том, что я не возвращал код состояния HTTP 200, потому что я не вызывал какой-либо метод рендеринга и не возвращал значение в конце своего метода действия.

Добавление renderText("OK"); решило мою проблему.

ok(); - более аккуратный способ решить эту проблему.

person ripper234    schedule 25.01.2012

попробуй изменить на

    script      : '/application/upload',

(обратите внимание на строчную букву a в application... play всегда создает URL-адреса в нижнем регистре, когда вы используете маршрут по умолчанию.)

что касается возможности загружать только один файл за раз:

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

person Dominik Dorn    schedule 24.01.2012
comment
Я работаю в режиме разработки, но проблема, похоже, не связана с потоками Play. Метод действия Play содержит только println() и немедленно возвращается. Даже после его завершения клиент не может даже начать загрузку другого файла. Возможно, я должен сделать что-то для Uploadify, чтобы понять, что я правильно обрабатываю загрузку? - person ripper234; 25.01.2012
comment
хм... он просто возвращается? вы должны сделать хотя бы ok() в конце действия. - person Dominik Dorn; 25.01.2012