我正在尝试更改图片的保存路径。 如果我调试,我会看到以下路径:
/tmp/playtemp4579361689183556686
我以为我将使用以下命令更改目录路径:
file.renameTo(new File(path))
有人知道如何改变路径吗? 我在哪里犯了错误?
整个代码如下。
public Result doUpload() {
Http.MultipartFormData<File> body = request().body().asMultipartFormData();
Http.MultipartFormData.FilePart<File> picture = body.getFile("picture");
Path uploadPath = environment.rootPath().toPath();
final String uploadFolder = "/public/uploads/";
if (picture != null) {
String fileName = picture.getFilename();
String contentType = picture.getContentType();
File file = picture.getFile();
String path = uploadPath + uploadFolder + fileName;
Logger.info("path: {}", uploadPath);
Logger.info("whole path: {}", path);
file.renameTo(new File(path));
return ok("File uploaded");
} else {
flash("error", "Missing file");
return badRequest();
}
}
答案 0 :(得分:2)
使用/tmp
(在适用的操作系统上)是一种兼容性约定,因为它可由所有用户而不仅仅是管理用户写入。
在我自己的上传项目中,我通常会将文件的副本复制到我想要的任何路径中,然后删除临时文件: -
Files.copy(file.toPath(), Paths.get("/my/apps/file/store/path/", ("copy_" + name)), REPLACE_EXISTING)
Files.deleteIfExists(file.toPath)
答案 1 :(得分:0)
renameTo应该实际上做你想要的。 我在我的项目中也使用它,你可以在这个问题中看到: Play: How to prevent 404 on image src on first request after upload
File movedFile = new File("/var/www/public/", "filename.jpg");
file.renameTo(movedFile);
这就是我使用它的方式。其他构造函数应该没有区别。但是从你的问题来看,不清楚你身边有什么问题。
另外:请注意,将文件移动到/ public可能无法像您期望的那样在生产环境中运行。当您进行生产构建时,公共中的所有内容都打包到.jar文件中。 在运行时上传的文件应该移动到外部位置