2014-03-31 52 views
0

JSP頁面:如何將文件jsp頁面傳遞給動作類?

<input type="file" name="scan_file" accept="application/pdf" id="scan_file" /> 

通行證文件java類:

$.ajax({ 
    type: "POST", 
    url: "bank_deposit1",   
    data: { 
     scan_file:$("#scan_file").val() 
}, 
success: function(response) 
{ 
alert("done"); 
}, 
error: function(e) 
{ 
alert("fail"); 
}}); 

文件無法傳遞到Java類。爲什麼?

+0

java類或servlet? – Rembo

+0

它的servlet .... – sathya

+0

運行時會發生什麼? – Rembo

回答

0

試試這個:

HTML表單:

<form id="myForm" action="uploadFileData" method="post" enctype="multipart/form-data"> 
    Enter Your Name: 
    <input type="text" name="yourname" id="yourname" /><br/> 
    Select Your Photoes: 
    <input type="file" name="file" id="file" /> 
    <input type="submit" value="save profile" /> 
</form> 
<div id="response"></div> 

和JS不喜歡:

$('form#myForm').submit(function(event){  
    //disable the default form submission 
     event.preventDefault(); 
    //grab all form data 
     var formData = new FormData($(this)[0]); 

    $.ajax({ 
     url: $(this).attr('action'), 
     type: "POST",  
     cache: false, 
     processData: false, 
     contentType: false, 
     data: formData, 
     success: function (res) { 
       $("#response").text(res); 
     },  
     error: function(jqXHR, textStatus, errorThrown) { 
       alert(textStatus+' : '+ errorThrown); 
      } 

     }); 

}); 

然後在servlet的保存文件,如:

@WebServlet("/uploadFileData") 
@MultipartConfig //in order to let it recognize and support multipart/form-data requests and thus get getPart() to work 
public class UploadFileData extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    private String UPLOAD_DIRECTORY; 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     UPLOAD_DIRECTORY = "E:\\";//request.getSession().getServletContext().getRealPath("/upload"); 

     // Set response content type 
     response.setContentType("text/html"); 

     String yourname = request.getParameter("yourname"); 
     System.out.println(yourname); 

     Part filePart = request.getPart("file"); 
     String fileName = getFileName(filePart); 
     System.out.println("fileName:"+fileName); 
     InputStream fileContent = filePart.getInputStream(); 

     System.out.println("upload dir: "+UPLOAD_DIRECTORY); 
     File file = new File(UPLOAD_DIRECTORY+fileName); 
     try{ 
      FileOutputStream fOutputStream = new FileOutputStream(file); 
      try{ 
       byte[] bytes = new byte[8 * 1024]; 
       int bytesRead; 
       while((bytesRead = fileContent.read(bytes)) != -1){ 
        fOutputStream.write(bytes, 0, bytesRead); 
       } 
       System.out.println("file uploaded successfully.."); 
       response.getWriter().println("file uploaded successfully.."); 
      }finally{ 
       fOutputStream.close(); 
      } 
     }finally{ 
      fileContent.close(); 
     } 

    } 

    /** 
    * Utility method to extract file name from content-disposition. 
    * @param filePart 
    * @return file name 
    */ 
    private String getFileName(Part filePart) { 
     for(String cd: filePart.getHeader("content-disposition").split(";")){ 
      if(cd.trim().startsWith("filename")){ 
       String fileName = cd.substring(cd.indexOf('=')+1).trim().replace("\"", ""); 
       return fileName.substring(fileName.lastIndexOf('/') + 1).substring(fileName.lastIndexOf('\\') + 1); // MSIE fix. 
      } 
     } 
     return null; 
    } 

} 


僅供參考 see this answer

+0

@sathya是的,你遇到這個解決方案的任何問題? – Rembo

+0

你應該閱讀一些**教程**,如果你說'Action「,你應該說'Servlet'不是'Action',那麼當你談論'Struts'時,人們會理解,並且在我的解決方案中,我添加了評論,所以請通過它。如果你不明白搜索或提出問題。 – Rembo

+0

@sathya鏈接添加底部有一個看看,你會得到足夠的解釋。 – Rembo

相關問題