2

CSV ファイルをアップロードし、そこから詳細を取得して MySQL データベースを埋めたいと思っていました。私はプレイを使用しています!フレームワーク 2 と Java を使用していますが、このソリューションを実装するのが困難です。

これは私のJavaコードです

       public static Result uploadfile() {
         File fl = request().body().asRaw().asFile();

          if (fl != null) {


            return ok("File uploaded");
          } else {
            flash("error", "Missing file");
            return redirect(routes.Application.index());    
          }

これは私の Upload.Scala.html コードです

   @(uploadForm: Form[Application.upl])

   @import helper._

   @main("Upload file") {
      @form(action = routes.Application.uploadfile) {

         <input type="file" name="flname">

         <p>
            <input type="submit" value="upload">
         </p>

      }
   }

そして最後に私のルートファイル

POST     /uploadfile                controllers.Application.uploadfile()

アップロードをヒットすると、実行例外が発生し、request().body().asRaw().asFile()実際にはnull!

[NullPointerException: null]

私が間違っていることは何ですか?

================================================== ================================ わかりましたので、現在のコードは次のとおりです。

  public static Result uploadfile() {
  play.mvc.Http.MultipartFormData body = request().body().asMultipartFormData();
    FilePart flpart = body.getFile("fl") ;
    if (flpart != null) {

       File file = flpart.getFile();
       ImportCSV impCSV = new ImportCSV();
       try{
           if (file.exists()) 
           {
               BufferedReader br = new BufferedReader( new FileReader(file));
               System.out.println(file.getName() + " - " + file.getAbsolutePath());
               impCSV.importCSV(br);
           }
           else
           {
               System.out.println("File not found!");
               return redirect(routes.Application.upload()); 
           }
       }
       catch(Exception e)
       {
           System.err.println("Buffering file " + file.getName() +": " + e.getMessage());

       }
       return ok("File uploaded");
    } else {
       flash("error", "Missing file");
     return redirect(routes.Application.index());    
    }
}

そして ImportCSV.java (モデルを拡張する)

public static void importCSV( BufferedReader br) 
{

    parseFile(br);


    if(vals!=null)
    {
        Student student = new Student();
        List<Student> newStudents;
        newStudents = GetStudentDetails(vals);
        try{
            student.insertStudentList(newStudents);
        }
        catch(Exception e)
        {
            System.err.println("student inserting Error: " + e.getMessage());

        }

    }
}

 static void parseFile( BufferedReader br) {
    try {

          String line = "";
          StringTokenizer token = null;
          int lineNum = 0, tokenNum = 0;

          List<values> CSVvalues = new LinkedList<values>();
          values LnValues = new values();
          while((line = br.readLine()) != null) {
                lineNum++;

                // break comma separated file line by line
                token = new StringTokenizer(line, ",");
                LnValues = new values();
                while(token.hasMoreTokens()) {
                      tokenNum++;
                      switch(tokenNum)
                      {
                        //Student ID
                          case 0:
                          {
                              LnValues.setStudID(Long.getLong(token.nextToken()));
                          }
                          //Student Name
                          case 1:
                          {
                              LnValues.setStudName(token.nextToken());
                          }
                          //Student DoB
                          case 2:
                          {
                              LnValues.setStudDoB(Date.valueOf(token.nextToken()));
                          }
                          //Class
                          case 3:
                          {
                              LnValues.setCl(token.nextToken());
                          }
                          //Year
                          case 4:
                          {
                              LnValues.setYear(Integer.parseInt(token.nextToken()));
                          }
                          //Quarter
                          case 5:
                          {
                              LnValues.setQuarter(token.nextToken());
                          }
                          //Maths Grade
                          case 6:
                          {
                              LnValues.setGradeM( Float.parseFloat(token.nextToken()));
                          }
                          //Computer Science Grade
                          case 7:
                          {
                              LnValues.setGradeCS(Float.parseFloat(token.nextToken()));
                          }
                          //Literature grade
                          case 8:
                          {
                              LnValues.setGradeL( Float.parseFloat(token.nextToken()));
                          }                           

                      }


                }
                CSVvalues.add(LnValues);
                tokenNum = 0;
          }

          vals = CSVvalues;
    } catch(Exception e) {
          System.err.println("Parsing file  Error: " + e.getMessage());

    }

Buffered リーダーを渡すと、データは null になります。最初に、ファイル(File fl)をパラメーターに送信しようとしましたが、nullエラーも発生しました。場合によっては @Util アノテーションを試しましたが、コンパイラはそれを認識しないと文句を言います! 私は提案にオープンです!

4

1 に答える 1

3

これを行う方法については、 http ://www.playframework.org/documentation/2.0/JavaFileUploadを参照してください。

request().body().asRaw().asFile();ajaxを使用してファイルをアップロードしている場合にのみ機能します。代わりに通常のPOSTリクエストを使用している場合は、ドキュメントで提案されている解決策を使用して試す必要があります。

public static Result upload() {
    MultipartFormData body = request().body().asMultipartFormData();
    FilePart picture = body.getFile("picture");
    if (picture != null) {
       String fileName = picture.getFilename();
       String contentType = picture.getContentType(); 
       File file = picture.getFile();
       return ok("File uploaded");
    } else {
       flash("error", "Missing file");
       return redirect(routes.Application.index());    
    }
}

また、ここで正しいフォーム形式を使用する必要があることに注意してください。

@form(action = routes.Application.upload, 'enctype -> "multipart/form-data")

于 2012-11-14T20:04:02.980 に答える