更改上传路径播放框架

时间:2016-09-17 06:28:40

标签: playframework playframework-2.5

我正在尝试更改图片的保存路径。 如果我调试,我会看到以下路径:

 /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();
    }
}

2 个答案:

答案 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文件中。 在运行时上传的文件应该移动到外部位置