7

我使用play framework 2.1.2使用Java和我創建視圖上傳多個文件和我的代碼是在這裏:如何使用播放框架上傳多個文件?

@form(action = routes.upload.up, 'enctype -> "multipart/form-data") { 
      <input type="file" name="picture" accept="application/pdf" multiple="multiple"><br/> 
      <input type="submit" value="upload"> 

      } 

我要上傳僅doc和pdf文件

如何限制表單只上傳doc和pdf文件?

我可以用java,但我在尋找html代碼。

在此之後,我想將多個文件存儲到我的計算機中的永久存儲。

和我上傳的文件的打印名稱。

我的代碼:

public static Result up(){ 


MultipartFormData md=request().body().asMultipartFormData(); 

     List<FilePart>file; 

     file=md.getFiles(); 

     for(FilePart p: file){ 
     Logger.info(p.getFilename()); 
     } 

     return ok(file.get(0).getFilename()); 
} 

存儲文件到臨時目錄,但我想商店永久位置不是臨時目錄的文件沒有臨時文件一樣,如果我上傳a.docx我想把這個文件存入,用a.docx這個名字。

我不想將文件存儲到數據庫中。

and 如何列出我通過文件名上傳的所有文件?

我發現了一些問題,但我沒有得到答案,因爲這個問題是舊版本。

給我一些想法來解決這個問題。

+0

檢查這個環節,我希望它有助於[文件上傳](http://www.erol.si/2014/10/handle-file-uploads-in-play-framework- 2-X-的java /) –

回答

7

這裏是我如何實施我的。如果我在某個地方犯了什麼錯誤,我很抱歉。我「重構」它,使它看起來不像我的生產代碼。

在HTML我有:

<form name="fileUploadForm" method="POST" enctype="multipart/form-data" action="@routes.Application.upload()"> 
     File 1: <br /> <input type="file" name="filePart1" id="filePart1"><br /> 
     File 2: <br /> <input type="file" name="filePart2" id="filePart1"><br /> 
</form> 

在我的控制,我有:

public static Result upload() { 
    MultipartFormData body = request().body().asMultipartFormData(); 

    FilePart filePart1 = body.getFile("filePart1"); 
    FilePart filePart2 = body.getFile("filePart2"); 

    File newFile1 = new File("path in computer"); 
    File newFile2 = new File("path in computer"); 

    File file1 = filePart1.getFile(); 
    File file2 = filePart2.getFile(); 

    InputStream isFile1 = new FileInputStream(file1); 
    InputStream isFile2 = new FileInputStream(file2); 

    byte[] byteFile1 = IOUtils.toByteArray(isFile1); 
    byte[] byteFile2 = IOUtils.toByteArray(isFile2); 

    FileUtils.writeByteArrayToFile(newFile1, byteFile1); 
    FileUtils.writeByteArrayToFile(newFile2, byteFile2); 

    isFile1.close(); 
    isFile2.close(); 
} 

就像克里斯說,你將獲得Apache的CommonIO

您可以輕鬆地做到這一點購買添加到您在/ PlayProject /項目中找到的Build.scala:

import sbt._ 
import Keys._ 
import play.Project._ 
import com.typesafe.config._ 

object ApplicationBuild extends Build { 
    val appDependencies = Seq(
    "commons-io" % "commons-io" % "2.4" //add this here 
) 
} 

在此實現中,您可以將文件中存儲的文件存儲在您指定的位置File newFile1的任何位置。但是如果你想列出你的文件,你將不得不使用數據庫。但是,您只需將文件路徑作爲String(varchar)存儲在數據庫中。我將把這部分留給你弄清楚,因爲我不知道你想如何處理文件檢索。

您可以限制用戶只使用Javascript上傳某些類型的文件。的JavaScript通過檢查文件名做表單驗證:下面是一個例子:

<script> 
    var file1 = document.getElementById("filePart1").value; 
    if (file1.indexOf(".pdf") == -1) { 
     alert("Not a PDF file!"); 
    else { 
     document.fileUploadForm.submit(); 
    } 
</script> 

希望所有的幫助。