我想上傳CSV文件,並從那裏獲取詳細信息以填充MySQL數據庫。我正在使用Play!框架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>
}
}
最後我routes文件
POST /uploadfile controllers.Application.uploadfile()
有一次,我打上傳執行例外發生,說request().body().asRaw().asFile()
實際上是null
!
[NullPointerException異常:空]
任何想法我做錯了嗎?
============================================== ===================================== 好,所以我現在的代碼如下 在應用程序。的java
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());
}
一旦我通過緩衝讀取器中的數據爲空。一開始我試圖將文件(文件fl)發送給參數,但我也得到了空錯誤。我在某些情況下嘗試了@Util註釋,但是編譯器抱怨沒有識別它! 我很樂意提供建議!
感謝您的回覆!我確實改變了代碼,但是一旦我將該文件傳遞給另一個解析函數的函數調用該文件爲空的異常!我甚至試圖將文件放入緩衝讀取器併發送它,但仍然... nada!使用@Util之前的函數在編譯期間創建一個錯誤,因爲找不到你!!!!! – XeonCy
在第一個函數裏面它仍然有效嗎? – Nihathrael
如果你指的是從窗體到結果函數的文件轉換,它似乎可以工作。但是,否則文件不會以任何方式發送到輔助功能。有任何想法如何解決這個問題? – XeonCy