2017-07-16 12 views
0

フロントエンドを使用してファイルをアップロードし、コントローラからアクセスし、javaでファイルをチェックしたいとします。アップロードしたいファイルはXMLファイルです。私はXMLスキームでそれをチェックし、それは完全に動作します。Java Spring - ファイルをアップロードしてから、HTMLフロントエンドでレスポンスを返す方法は?

HTML:私のコントローラで

<form method="POST" enctype="multipart/form-data" action="/uploadXML"> 
    <input name="file" type="file" id="importFile" /> <br> 
    <button name="button" type="submit" class="buttonUpload">Upload</button> 
</form> 

ここ
@RequestMapping(value="/uploadXML", method=RequestMethod.POST) 
public @ResponseBody String handleFileUpload( 
     @RequestParam("file") MultipartFile file){ 
     String name = "test11"; 
    if (!file.isEmpty()) { 
     try { 
      byte[] bytes = file.getBytes(); 
      BufferedOutputStream stream = 
        new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded"))); 
      stream.write(bytes); 
      stream.close(); 
      File convertedFile = convert(file); 



      //Response response = new Response("Done", name); 
      //return response; 
      return validateAgainstSchema(convertedFile); 

     } catch (Exception e) { 
      //Response response = new Response("fail", name); 
      //return response; 
      return "You failed to upload " + name + " => " + e.getMessage(); 
     } 
    } else { 

     //Response response = new Response("fail", name); 
     //return response; 
     return "You failed to upload " + name + " because the file was empty."; 
    } 
} 

私は "通常の" ファイルにMultiparFileを変換*convert(file)*で、アップロードされたファイルを取得します。 validateAgainstSchema() XMLファイルが適切な形式であるかどうかを確認します。 私は理解できません。 * validateAgainstSchema()*文字列「ファイルが正しい形式である」を取得するか、「ファイルが正しい形式ではありません」というメッセージが表示されます。コントローラでこの文字列を返すと、ブラウザはこの文字列だけを含む新しいページにリダイレクトされます。

しかし、私はその結果をシングルページアプリケーションで、たとえば私のフロントエンドで。私は、この問題を解決する方法としてAjaxが役立つかもしれないと考えました。

私のAJAXコード:

$(document).ready(function() { 

    var url = window.location; 

    // SUBMIT FORM 
    $("#customerForm").submit(function(event) {//hier die 1 entfernen!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     // Prevent the form from submitting via the browser. 
     event.preventDefault(); 
     ajaxPost(); 
    }); 


    function ajaxPost(){ 

     // PREPARE FORM DATA 
    /* var formData = { 
      firstname : $("#firstname").val(), //nachher um Textfelder und so auszulesen 
      lastname : $("#lastname").val() 
     }*/ 

     var text = "..........,"; 

     // DO POST 
     $.ajax({ 
      //type : "POST", 
      contentType : "application/json; charset=utf-8", 

      url : url, 
      //url : url + "/uploadXml", 
      //url: "/uploadXML", 
      data : text, 
      //data : JSON.stringify(formData), 
      //dataType : 'json', 
      success : function(result) { 
       //result ist hier mein html document 
       if(result.status == "Done"){ 

       /* $("#postResultDiv").html("<strong>" + "Post Successfully! Customer's Info: FirstName = " 
          + result.data.firstname + " ,LastName = " + result.data.lastname + "</strong>"); */ 

        $("#postResultDiv").html("<strong>" + "success" + "</strong>"); 
       }else{ 
        $("#postResultDiv").html("<strong>" + "error" + "</strong>"); 
       } 
       console.log(result); 
       console.log("test............."); 
      }, 
      error : function(e) { 
       alert("Error!") 
       console.log("ERROR: ", e); 
      } 
     }); 



    } 


}) 

この部分、私は全く理解していません。私はウェブ上で見つけたバージョンを使用し、少し調整しました。 (私はid = "customerForm"を私のinput type="file" btw.に追加しました)。今私は送信ボタンを押して私のdivはテキスト "エラー"を取得し、私のhtmlがコンソールに印刷され、私のajax-requestがコンソールに "成功"を表示する以外は何も起こりません。 私のajaxコードの "result"は自分のhtmlコードのようです。私のdivでXML検査プロシージャの結果を返す方法を教えてください。

誰かが私にこのことを説明できるケースでは、どうすればXMLファイルを保存できますか?私は後で私のプロジェクトでそれが必要です。

ありがとうございました!

答えて

0

divの代わりに、IFRAMEを使用して結果を表示することができます。

<form method="POST" enctype="multipart/form-data" action="/uploadXML" target="result"> 
    <input name="file" type="file" id="importFile" /> <br> 
    <button name="button" type="submit" class="buttonUpload">Upload</button> 
</form> 
<iframe id="result" name="result"></iframe> 
関連する問題