2016-09-17 83 views
0

我想改变图像的保存路径。 如果我调试我看到下面的路径:更改上传路径播放框架

/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

采用/tmp(适用的操作系统的)是兼容的公约,因为它是由所有用户,而不仅仅是管理用户可写的。

在我自己上传的项目,我一般让文件到任何路径,我希望它的一个副本,然后删除临时文件: -

Files.copy(file.toPath(), Paths.get("/my/apps/file/store/path/", ("copy_" + name)), REPLACE_EXISTING) 
Files.deleteIfExists(file.toPath) 
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文件。 在运行时上传的文件应移动到外部位置