我想在我的网站上上传文件/图像。
实际上,我可以上传文件,但有时我的页面上有错误,我认为这不是执行此操作的好方法。

我的代码:

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


但是我已经调试了一些信息(为什么要进行两次调试?):

[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

谢谢您的帮助 !
我是法国人,很抱歉犯错。

最佳答案

您必须使用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();
     }
  }

10-04 09:53