2012-01-16 3 views
4

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

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 (here), которые используют это в качестве ответа:

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

Но он не работает в v1.2.4 игры !.

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

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

ответ

2

Ну, я открыл ticket на 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

было ли это разрешено или вам удалось обходное решение? –

+0

Я не пробовал с 1.2.5, я сразу переключился на 2.x. Если кто-то добавит здесь обновление, я буду рад дать ему/ей принятый ответ. Если у меня есть время, я попробую протестировать ветку 1.2.5 и обновить свой ответ. –

+0

Я обновил свой ответ после тестов на 1.2.5 :) –

0

Использование автоматического связывания вместо того, чтобы смотреть в Params:

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..." /> 
#{/} 
+0

Это не работает для меня:/(В случае, если я использую Play! V1.2.4 с java 1.6.0_26). У меня все еще есть список из числа файлов, которые я загрузил, но с тем же именем (первый). –

-1

multi file upload with play?

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()); 
    } 
} 

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

Смежные вопросы