2016-06-15 28 views
2

ファイルをアップロードして特定のディレクトリに保存したいのですが、私は新しいファイルコンセプトです。私のページからファイルをアップロードすると、別のディレクトリ(C:\ Users \ ROOTCP〜1 \ AppData \ Local \ Temp \ multipartBody989135345617811478asTemporaryFile)。指定したディレクトリにはありません。設定できません。解決策を見つけるのを手伝ってください。アップロードされたファイルを特定のディレクトリに保存できません

public static Result uploadHoFormsByHeadOffice() throws Exception { 

    Logger.info("@C HoForms -->> uploadHoFormsByHeadOffice() -->> "); 
    final String basePath = System.getenv("INVOICE_HOME"); 

    play.mvc.Http.MultipartFormData body = request().body() 
      .asMultipartFormData(); // get Form Body 

    StringBuffer fileNameString = new StringBuffer(); // to save file path 
                 // in DB 
    String formType = body.asFormUrlEncoded().get("formType")[0];// get formType from select Box 
    FilePart upFile = body.getFile("hoFiles");//get the file details 
    String fileName = upFile.getFilename();//get the file name 
    String contentType = upFile.getContentType(); 
    File file = upFile.getFile(); 

    //fileName = StringUtils.substringAfterLast(fileName, "."); 

    // path to Upload Files 
    File ftemp= new File(basePath +"HeadOfficeForms\\"+formType+""); 

    //File ftemp = new File(basePath + "//HeadOfficeForms//" + formType); 
    File f1 = new File(ftemp.getAbsolutePath());// play 

    ftemp.mkdirs(); 
    file.setWritable(true); 
    file.setReadable(true); 
    f1.setWritable(true); 
    f1.setReadable(true); 
    //HoForm.create(fileName, new Date(), formType); 

    Logger.info("@C HoForms -->> uploadHoFormsByHeadOffice() <<-- Redirecting to Upload Page for Head Office"); 
    return redirect(routes.HoForms.showHoFormUploadPage()); 
} 

} 

私は本当に混乱してアップロードされたファイルは、この中に保存されている理由(C:\ Users \ユーザーROOTCP〜1つの\のAppData \ローカル\ Tempに\ multipartBody989135345617811478asTemporaryFile)パス。

+0

「INVOICE_HOME」の値は? – Ravikumar

+0

ベースパスの値は:D:\ – dnvsp

答えて

1

あなたはほぼあります。

File file = upFile.getFile();は、フォーム入力を介して取得している一時ファイルです。あなたがしなければならないのは、file.renameTo(ftemp)のようなことをして、このファイルをあなたの望む場所に移動するだけです。

あなたのコードの問題は、メモリftempf1にたくさんのファイルを作成していることですが、ディスクに書き込むなど、決して何もしません。

また、コードをクリーンアップすることをお勧めします。それの多くは何もしません(前述のf1、あなたがブロックしているブロックsetWritable)。これにより、デバッグが非常に簡単になります。

+0

ここにもいくつかの問題があります。保存パスがローカルでない場合(ネットワークドライブ、AWSのEBSドライブ)、 'file.renameTo'は失敗します – saurabheights

0

ファイルがアップロードされると、あなたが提供した名前としてシステムの一時フォルダに保存されます。そのファイルを好きな名前と場所にコピーするのはあなた次第です。あなたのコードでは、Fileオブジェクトf1を作成しています。このファイルは、ファイルを終了させたい場所のように見えます。

一時フォルダーから目的のフォルダーにファイルをコピーするにはファイルコピーが必要です。おそらく最も簡単な方法は、Apacheの共有FileUtilsクラスを使用することです。

File fileDest = new File(f1, "myDestFileName.txt"); 
try { 
    FileUtils.copyFile(ftemp, fileDest); 
} 
catch(Exception ex) { 
    ... 
} 
+0

私はどこに置く必要があるのか​​本当に混乱していますか? – dnvsp

関連する問題