2016-06-15 1 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 \ Local \ Temp \ multipartBody989135345617811478asTemporaryFile) пути.

+0

Что такое ценность 'INVOICE_HOME'? – Ravikumar

+0

Значение базового пути: D: \ – dnvsp

ответ

1

Вы почти у цели.

File file = upFile.getFile(); - это временный файл, который вы получаете через ввод формы. Все, что вам нужно сделать, - это переместить этот файл в нужное место, выполнив что-то вроде этого: file.renameTo(ftemp).

Ваша проблема заключается в том, что вы создаете кучу файлов в памяти ftemp и f1, но вы никогда с ними ничего не делаете (например, записываете их на диск).

Кроме того, я рекомендую вам очистить свой код. Многое не делает ничего (вышеупомянутый f1, также блок, где вы делаете setWritable). Это облегчит отладку.

+0

Здесь мало проблем. Если путь сохранения не является локальным (например, сетевой диск или EBS-диск в AWS), 'file.renameTo' не будет работать – saurabheights

0

Я считаю, что когда файл загружен, он сохраняется в системной временной папке в качестве имени, которое вы указали. Вы должны скопировать этот файл в нужное вам имя и местоположение. В вашем коде вы создаете объект File f1, который, как представляется, является местом, в котором вы хотите, чтобы файл оказался.

Вам необходимо сделать копию файла, чтобы скопировать файл из временной папки в нужную папку. Вероятно, самым простым способом является использование класса FileUtils apache.

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

Я действительно путаю, где я должен положить? Может у, пожалуйста, объясните ясно. – dnvsp