2016-04-04 35 views
-2

私は自分のWebページに画像を入力したいと思っています。私はこのための私のjspで次のコードを書かれている: -html/jspからサーブレットにファイルタイプパラメータを受け取る方法

<form action="Upload" method="get" enctype="multipart/form-data"> 
    Image<input type="file" name="image" accept="image/jpg" id="image"> 
    <input type="submit" value="submit"> 
</form> 

が、私はそれが入力ストリームまたはファイルである必要があるかどうかであるサーブレットで「画像」パラメータを受信する方法がわからない、私は何を持っていませんアイディア。私に正しいコードを教えてください。

+0

[JSP /サーブレットを使用してサーバーにファイルをアップロードするにはどうすればよいですか?](http://stackoverflow.com/questions/2422468/how-to-upload-files-to- server-using-jsp-servlet) –

答えて

0

私は私の問題への解決策を見つけた骨の折れる努力とGoogle検索した後。 Stackoverflowのページはとても助けになりました。最初に私のフォームのgetメソッドをこのように投稿するように変更しました

<form action="Upload" method="post" enctype="multipart/form-data"> 
    Image<input type="file" name="image" id="image" accept="image/jpg"> 
    <input type="submit" value="submit"> 
</form> 

次に、私は次のサーブレットコードを書いています。サーブレットの部品データとして<input type="file">のデータを受け入れます。次に、入力ストリームに変換します。次に、入力ストリームをデータベースに保存することができます。以下は私のサーブレットです: -

package controller; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.PrintWriter; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.MultipartConfig; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.Part; 
import model.ConnectionManager; 

@MultipartConfig(location="/tmp", fileSizeThreshold=1048576, maxFileSize=20848820, maxRequestSize=418018841) 
public class Upload extends HttpServlet { 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     Part filePart=request.getPart("image");`// Retrieves <input type="file" name="image">` 
     String filePath = filePart.getSubmittedFileName();//Retrieves complete file name with path and directories 
     Path p = Paths.get(filePath); //creates a Path object 
     String fileName = p.getFileName().toString();//Retrieves file name from Path object 
     InputStream fileContent = filePart.getInputStream();//converts Part data to input stream 

     Connection conn=ConnectionManager.getConnection(); 
     int len=(int) filePart.getSize(); 
     String query = ("insert into IMAGETABLE(ID,NAME,LENGTH,IMAGE) VALUES(?,?,?,?)"); 


     try { 
      PreparedStatement pstmt = conn.prepareStatement(query); 
      pstmt.setInt(1, 5); 
      pstmt.setString(2, fileName); 
      pstmt.setInt(3, len); 
      pstmt.setBinaryStream(4, fileContent, len); 
      success=pstmt.executeUpdate(); 
     } catch (SQLException ex) { 
      System.out.println("Error : "+ex.getMessage()); 
     }finally{ 
      try{ 
       if(fileContent!=null)fileContent.close(); 
       if(conn!=null)conn.close(); 
      }catch(IOException | SQLException ex){ 
       System.out.println("Error : "+ex.getMessage()); 
      } 
     } 

    } 

} 

実行後、正常に実行されます。私たちはユーザーからのイメージを受け入れ、データベースに保存します。このソリューションがすべて役に立ちますようお願いいたします:)

0

Apache Commonsファイルを使用します。 フォームメソッドはmethod = "POST"でなければなりません。 は、その後、あなたのweb.xmlに、あなたのサーブレットにリクエストをマッピングする必要があります。

<servlet> 
     <servlet-name>MyServlet</servlet-name> 
     <servlet-class>com.stackoverflow.MyServletClass</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>MyServlet</servlet-name> 
     <url-pattern>/Upload</url-pattern> 
</servlet-mapping> 

次にあなたがHttpServletを拡張するクラスを作成し、doPostメソッド()メソッドを実装します。

ウェルが、ちょうどここに行く:http://www.codejava.net/java-ee/servlet/apache-commons-fileupload-example-with-servlet-and-jsp

+0

ありがとうございました:)。私は必死にそれを必要とした –

+0

私はそれを試みたが、それは動作しません。画像ファイルをアップロードしようとしています。これ以上の提案は.... –

+0

どの部分が動作していないのですか?どのようなエラーがありますか?ポストをメソッドとして使用していますか?私はMyServletClassがHttpServletを拡張することを意味しました。 –

関連する問題