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"> 

      } 

я хочу, чтобы загрузить только документ и pdf-файл.

Как ограничить форму для загрузки только документа и файла 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 имя.

Я не хочу хранить файл в базе данных.

и как указать весь файл, который я загрузил по имени файла?

Я нашел некоторый вопрос, но я не получаю ответы, потому что этот вопрос предназначен для старой версии.

дайте мне некоторое представление, чтобы исправить эту проблему.

+0

проверить эту ссылку я надеюсь, что это помогает [FileUpload] (http://www.erol.si/2014/10/handle-file-uploads-in-play-framework- 2-х-Java /) –

ответ

4

Чтобы получить файл в другом месте, чем темп места вам нужно будет скопировать его, лучше использовать что-то вроде FileUtils от Apache Commons (http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html)

Что касается имен файлов, которые вы можете получить его от MultipartFormData

  • Первые GetFiles() method
  • Второй GetFile(): Файл method
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(); 
} 

Так же, как Крис сказал, вы должны будете получить CommonIO Апач

Вы можете легко это сделать добавьте это в свой Build.scala в/PlayProject/проект:

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. Но вам нужно будет использовать базу данных, если вы хотите перечислить свои файлы. Но вам нужно сохранить путь к файлу в виде строки (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> 

Надежда все это помогает.

1

Одним из способов может быть использование пользовательского парсера тела, который может взять указанный каталог и сохранить загруженные файлы там. Но вам нужно добавить код Scala в проект. Вот суть:

https://gist.github.com/nraychaudhuri/6349808

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