3

在 play 2.0 中在 mySql db 中上传文件的最简单方法是什么?

4

2 回答 2

4

在数据库或上传文件夹中上传文件,然后在数据库中保存链接?

我会去将参考保存在数据库中并将图像上传到您的网络服务器上的某个位置。或者,如果您坚持将图像保存在数据库中,请将其保存为拇指,这将使您的数据库大小保持可维护性并且您的数据库大小可以接受。在我看来,数据库是用于数据而不是像图像这样的资产。

上传文件记录在案:http ://www.playframework.org/documentation/2.0/JavaFileUpload

我是怎么做到的:

看法

在视图中,确保你有正确的enctype(这个是基于 twitter bootstrap 的)

@helper.form(controllers.orders.routes.Task.save, 'class -> "form-horizontal", 'enctype -> "multipart/form-data")

文件输入:

@inputFile(taskForm("file1"), '_display -> "Attachment", '_label -> Messages("file"))

在您的控制器中

// first i get the id of the task where I want to attach my files to
MultipartFormData body = request().body().asMultipartFormData();
List<FilePart> resourceFiles = body.getFiles();

然后遍历附件并将它们上传到上传文件夹:

for (int i = 0; i < resourceFiles.size(); i++) {
    FilePart picture = body.getFile(resourceFiles.get(i).getKey());
    String fileName = picture.getFilename();
    File file = picture.getFile();

    File destinationFile = new File(play.Play.application().path().toString() + "//public//uploads//"
        + newTask.getCode() + "//" + i + "_" + fileName);
    System.out.println(play.Play.application().path());
    System.out.println(file.getAbsolutePath());

    try {
    FileUtils.copyFile(file, destinationFile);

    TaskDocument taskDocument = new TaskDocument(newTask.description, "/assets/uploads/"
        + newTask.getCode() + "/" + i + "_" + fileName, loggedInUsr, newTask);
    taskDocument.save();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
}

结果

上面的代码导致创建一个文件夹并将文件放置在该文件夹中。例子:

文件夹:T000345

  • 0_orange.png
  • 1_apple.png
  • 2_pear.png

编辑:2012-06-23

如果您收到有关 commons 包的错误,则必须将其包含在文件中Build.scala

val appDependencies = Seq(
// Add your project dependencies here,
"mysql" % "mysql-connector-java" % "5.1.18",
"org.specs2" %% "specs2" % "1.9" % "test",
"commons-io" % "commons-io" % "2.2") // at least this one must be present!
于 2012-05-11T18:55:00.360 回答
2

另一种方式,您可以在数据库中存储对照片的引用。

鉴于:

<form action="@routes.Application.index" method="POST" enctype="multipart/form-data">
           Photo<input type="file" name="photo"> <br>
             <input type="submit" value="Submit">    
</form>

在控制器中:

MultipartFormData body = request().body().asMultipartFormData();
            FilePart photo = body.getFile("photo");
            if (photo != null) {
                String fileName = photo.getFilename();
                File file = photo.getFile();
                File newFile = new File(play.Play.application().path().toString() + "//public//uploads//"+ "_" + fileName);
                file.renameTo(newFile); //here you are moving photo to new directory          
                System.out.println(newFile.getPath()); //this path you can store in database
            }
}
于 2014-07-19T19:39:25.070 回答