2016-11-27 61 views
1

我想在我的網站上傳文件/圖片。 其實我可以上傳我的文件,但有時我的網頁上有錯誤,我認爲這不是做這件事的好方法。PlayFramework - 如何上傳文件/圖片

我的代碼:

private String uploadImage() 
{ 
    String result = f.validate("avatar"); 
    if(result.isEmpty()) 
     return "none"; 
    Http.MultipartFormData.FilePart<File> file = body.getFile("avatar"); 

    if(file == null) 
     return "File is empty or not exist."; 

    String filename = file.getFilename(); 

    /* Debug file file*/ 
    Logger.debug("nameFile " + file.getFilename()); 
    Logger.debug("contentFile " + file.getContentType()); 
    /* End debug*/ 

    File f = file.getFile(); 

    /* Debug file f*/ 
    String name = f.getName(); 
    long totalSpace = f.getTotalSpace(); 
    Logger.debug("nameF " + name); 
    Logger.debug("sizeF " + totalSpace); 
    /* End debug*/ 

    try { 
     /* File user is not f file variable*/ 
     File fileUser = getFileUser(filename); 
     Try.of(fileUser::delete); 

     /* Use of org.apache.commons.io*/ 
     FileUtils.moveFile(f, getFileUser(filename)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return ""; 
} 

private File getFileUser(String fileName) 
{ 
    return new File("public/upload/avatars", 
        user.getId().toString() + "." + FilenameUtils.getExtension(fileName)); 
} 

private boolean fileIsPicture(File f) 
{ 
    String mimetype = new MimetypesFileTypeMap().getContentType(f); 
    String type = mimetype.split("/")[0]; 
    return (type.equals("image")); 
} 

錯誤:

java.io.FileNotFoundException: Source 'C:\Users\Alexis\AppData\Local\Temp\playtemp1188878075698565675\multipartBody8627595002998720963asTemporaryFile' does not exist 

,但我已經調試了一些信息(爲什麼2次調試?):

[info] play.api.Play - Application started (Dev) 
[info] application - avatar null 
[debug] application - nameFile KwizzyPicture.jpg 
[debug] application - contentFile image/jpeg 
[debug] application - nameF multipartBody1959853090277810547asTemporaryFile 
[debug] application - sizeF 763679993856 
[info] application - avatar null 
[debug] application - nameFile KwizzyPicture.jpg 
[debug] application - contentFile image/jpeg 
[debug] application - nameF multipartBody1959853090277810547asTemporaryFile 
[debug] application - sizeF 0 

Full code here

T要求你的幫助! 我是法國人,非常抱歉犯錯。

+0

粘貼在FileNoutFoundException拋出完整的堆棧跟蹤。 – Acapulco

+0

好吧等幾分鐘我回來 –

+0

https://gist.github.com/Kwizzy-DEV/7c40ec62d7b371972e7c45f4690f7b7e –

回答

0

你必須要使用FileInputStream和FileOutptStream類

Http.MultipartFormData.FilePart<File> file = body.getFile("avatar"); 

FileInputStream in = null; 
    FileOutputStream out = null; 
    try { 
    in = new FileInputStream(file); 
    //enter the file location in server 
    out = new FileOutputStream("output.jpeg"); 

    int c; 
    while ((c = in.read()) != -1) { 
     out.write(c); 
    } 
    }finally { 
    if (in != null) { 
     in.close(); 
    } 
    if (out != null) { 
     out.close(); 
    } 
    } 
+0

我用Spring FileCopy Util;)但我想你的也有工作 –