更改上传路径播放框架

change upload path play framework

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

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

/tmp(在适用的 OS 上)的使用是一种兼容性约定,因为它可由所有用户写入,而不仅仅是管理用户。

在我自己的上传项目中,我通常将文件复制到我想要的任何路径,然后删除临时文件:-

Files.copy(file.toPath(), Paths.get("/my/apps/file/store/path/", ("copy_" + name)), REPLACE_EXISTING)
Files.deleteIfExists(file.toPath)

renameTo 实际上应该做你想做的。 正如您在这个问题中看到的那样,我也在我的项目中使用它:

File movedFile = new File("/var/www/public/", "filename.jpg");
file.renameTo(movedFile);

我就是这么用的。其他构造函数的使用应该没有区别。但是从你的问题来看,你这边的问题还不清楚。

另外:请注意,将文件移动到 /public 可能无法像您预期的那样在生产环境中工作。当您进行生产构建时,public 中的所有内容都打包到一个 .jar 文件中。 运行时上传的文件应移动到外部位置