gpt4 book ai didi

playframework-2.0 - 玩! 2.1 Java完整的基本文件上传解决方案?

转载 作者:行者123 更新时间:2023-12-03 23:40:59 27 4
gpt4 key购买 nike

我的 Controller 中有以下基本操作(用于说明目的),它传递了一个 MultipartFormData 对象并检索图像和文件名。如果不为 null,则将文件名打印到 sbt 控制台(确实如此),然后根据 Play http://www.playframework.com/documentation/2.1.0/JavaFileUpload文档希望将其保存到 file.renameTo 中指定的目录(女巫没有)。

public static Result uploadProductImage(
Http.MultipartFormData body
) {
Http.MultipartFormData.FilePart image = body.getFile("image");

if (image != null) {
String fileName = image.getFilename();
System.out.println(fileName);
File file = image.getFile();
file.renameTo(new File("/public/images/products", fileName));
}
return products();
}

我找不到任何文档的部分是如何将此文件实际移动到 Play 项目的公共(public)文件夹中。我注意到 scala 的家伙有这个功能

ref.moveTo()

我知道至少还有 2 到 3 个其他问题类似,但它们没有描述如何将文件移动到项目目录。我在这里遗漏了一些基本非常简单的东西,但我无法在网上的任何地方找到它的文档。

最佳答案

进一步检查发现, Play 首先将上传的图像保存到系统特定的临时目录,在我的例子中是 /tmp/

我的 linux 系统设置了三个分区:-

/boot
/
/home

play 安装位于 /home 分区,逻辑上与 tmp 所在的 / 分开。在这种情况下,分区被视为单独的文件系统。

javadoc 声明:-

The rename operation might not be able to move a file from one filesystem to another

这意味着根据系统的不同,File.renameTo() 可能无法跨两个不同的分区、磁盘或文件系统运行。这就是 .renameTo() 失败的原因。

解决方案:-

使用 apache commons io FileUtils.moveFile()

Build.scala 中添加 "org.apache.directory.studio"% "org.apache.commons.io"% "2.4"

val appDependencies = Seq(
javaCore, jdbc, javaJdbc, javaEbean,
"org.apache.directory.studio" % "org.apache.commons.io" % "2.4"
)

在 Play 控制台中使用play clean compile

如果使用 IDEA play idea

public static Result uploadProductImage(
Http.MultipartFormData body
) {
Http.MultipartFormData.FilePart image = body.getFile("image");

if (image != null) {
String fileName = image.getFilename();
File file = image.getFile();
try {
FileUtils.moveFile(file, new File("public/images/products", fileName));
} catch (IOException ioe) {
System.out.println("Problem operating on filesystem");
}
}
return products();
}

关于playframework-2.0 - 玩! 2.1 Java完整的基本文件上传解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15135850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com