Play 2.0 で mySql db にファイルをアップロードする最も簡単な方法は何ですか?
2 に答える
データベースまたはアップロード フォルダにファイルをアップロードしてから、リンクをデータベースに保存しますか?
参照をデータベースに保存し、Web サーバーのどこかに画像をアップロードします。または、画像をDBに保存し続ける場合は、親指として保存します。これにより、データベースのサイズを維持し、dbのサイズを許容できる状態に保つことができます。私の意見では、DB はデータ用であり、画像などのアセット用ではありません。
ファイルのアップロードは文書化されています: http://www.playframework.org/documentation/2.0/JavaFileUpload
私がそれをした方法:
意見
ビューで、正しいことを確認しますenctype
(これは Twitter ブートストラップに基づいています)。
@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_オレンジ.png
- 1_りんご.png
- 2_ナシ.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!
別の方法として、写真への参照をデータベースに保存できます。
ビューで:
<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
}
}