Многократная загрузка файла с PlayFramework - PullRequest
4 голосов
/ 16 января 2012

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

HTML:

<form method="post" action="/upload" enctype="multipart/form-data">
    <input type="file" name="image" />
    <input type="file" name="image" />
    <input type="file" name="image" />
    <input type="file" name="image" />

    <input type="submit" name="submit" value="Send images" />
</form>

Контроллер:

public static void upload() {
    File[] images = params.get("image", File[].class);
    for (File f : images) {
        Logger.info (f.getName());
    }
}

Если я загружу image1.jpg, image2.jpg, image3.jpg &image4.jpg, Logger.info на консоли отобразится:

image1.jpg
image1.jpg
image1.jpg
image1.jpg

Другие изображения не будут использоваться.

Я пробовал использовать List<File> вместо File[], ноэто тоже не работает.

Я также видел, что здесь есть такой же вопрос на SO ( здесь ), который использует это как ответ:

List<Upload> files = (List<Upload>) request.args.get("__UPLOADS");

Но это не работает в v1.2.4 Play!.

Я использую Play v1.2.4.

Большое спасибо за вашу помощь!

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012

Ну, я открыл билет на Play! Framework, потому что это кажется проблемой, и, видимо, я не единственный, кто имеет такое поведение.

Я протестировал с новым 1.2.5, и проблема исправлена, по крайней мере, с решением, которое я дал на вопрос:

public static void upload() {
    File[] images = params.get("image", File[].class);
    for (File f : images) {
        Logger.info (f.getName());
    }
}

Примечание: я использую Java 7!

0 голосов
/ 09 июля 2013

загрузка нескольких файлов с воспроизведением?

public static void overviewsubmit(File fake) {
    List<Upload> files = (List<Upload>) request.args.get("__UPLOADS");
    for(Upload file: files) {
        Logger.info("Size = %d", file.getSize());
    }
}

Без аргумента File fake метод не будет обрабатывать multipart / form-data, и вы получите пустой массив request.args. Если кто-нибудь знает пьесу / стандартную аннотацию к ней, дайте мне знать:)

0 голосов
/ 17 января 2012

Используйте автоматическое связывание вместо просмотра в параметрах:

public class Application extends Controller {

    public static void index() {
        render();
    }

    public static void upload(File[] files)
    {
        for (File file : files)
        {
            Logger.info(file.getName());
        }

        index();
    }
}

Шаблон просмотра:

#{extends 'main.html' /}
#{set title:'Home' /}

#{form @upload(), enctype:'multipart/form-data'}
    <input type="file" name="files" />
    <input type="file" name="files" />
    <input type="file" name="files" />
    <input type="submit" value="Send it..." />
#{/}
...