2016-09-17 4 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

(該当するOSのオン)/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ファイルにパッケージ化されます。 ランタイムにアップロードされたファイルは、外部の場所に移動する必要があります

関連する問題