这是我的实施方式。如果我在某个地方犯了任何错误,我深表歉意。我“重构”了它,使其看起来与我的生产代码完全不同。
在 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();
}
就像 Kris 所说,你必须获得 Apache 的 CommonIO
您可以轻松地执行此操作,将其添加到 /PlayProject/project 中找到的 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
。但如果您想列出文件,则必须使用数据库。但您只需将文件路径作为字符串 (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>
希望所有这些都有帮助。