2012-01-16 50 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在玩遊戲!框架,因爲它似乎是問題,顯然,我不是唯一一個有這種行爲。

我用新的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

是解決了這個問題還是您管理了一個解決方法? – 2012-07-23 20:07:09

+0

我沒有用1.2.5試過,我直接切換到2.x.如果有人在這裏提出更新,我會很高興給他/她接受的答案。如果我有時間,我會嘗試使用1.2.5分支進行測試並更新我的答案。 – 2012-07-24 08:10:40

+0

我在1.2.5的測試後更新了我的答案:) – 2012-07-25 16:29:19

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)。我仍然有一個我上傳的文件列表,但是名稱相同(第一個)。 – 2012-01-17 11:07:51

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

沒有文件僞造參數的方法不會多處理/表單數據,你會得到一個空數組request.args中。如果有人知道它的播放/標準註釋,請讓我知道:)