2011-03-21 15 views
0

私はサーブレット技術には非常に新しいです。 Tomcatで動作しているサーバーにローカルファイルシステム(クライアントマシン)からファイルをアップロードしたいとします。誰かが私にこれを行う方法を教えてもらえますか?サーブレットを使用してサーバーにファイルをアップロードする方法は?

html入力要素タイプfile<input type="file"...>)とform action属性を使用して、サーブレットにデータをポストします。

plzヘルプme。

答えて

1

これは、サーブレットAPIに含まれていますが、基本的にこれは、アップロードされたストリームデータを処理するために、サーブレットAPIに含まIOストリーミングを使用していますhttp://commons.apache.org/fileupload/

を介して利用されていません - 私は、ファイルのアップロード機能を含めるする計画があったと思いますAPIの最新バージョンではボックスの内容を確認することができますが、これはいつも私のために働いています。

1

は、JSPからファイルを渡す:あなたが春を使用していないので、もし

春が内部で、ファイルアップロードのためのApache Commonsのを使用している、またはあなただけのAPIをサーブレットに固執たいと思い、私は同様コモンズを使用することをお勧めファイルアップロードコンポーネントを使用したHTML。フォームアクションでservlet.javaを設定します。

Servlet.java

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 

public class UploadServlet extends HttpServlet{ 
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 

    String saveFile=""; 
    String contentType = request.getContentType(); 
    if((contentType != null)&&(contentType.indexOf("multipart/form-data") >= 0)){ 
    DataInputStream in = new DataInputStream(request.getInputStream()); 
    int formDataLength = request.getContentLength(); 
    byte dataBytes[] = new byte[formDataLength]; 
    int byteRead = 0; 
    int totalBytesRead = 0; 
    while(totalBytesRead < formDataLength){ 
    byteRead = in.read(dataBytes, totalBytesRead,formDataLength); 
    totalBytesRead += byteRead; 
    } 
    String file = new String(dataBytes); 
    saveFile = file.substring(file.indexOf("filename=\"") + 10); 
    saveFile = saveFile.substring(0, saveFile.indexOf("\n")); 
    saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\"")); 
    int lastIndex = contentType.lastIndexOf("="); 
    String boundary = contentType.substring(lastIndex + 1,contentType.length()); 
    int pos; 
    pos = file.indexOf("filename=\""); 
    pos = file.indexOf("\n", pos) + 1; 
    pos = file.indexOf("\n", pos) + 1; 
    pos = file.indexOf("\n", pos) + 1; 
    int boundaryLocation = file.indexOf(boundary, pos) - 4; 
    int startPos = ((file.substring(0, pos)).getBytes()).length; 
    int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length; 
    File ff = new File(saveFile); 
    FileOutputStream fileOut = new FileOutputStream(ff); 
    fileOut.write(dataBytes, startPos, (endPos - startPos)); 
    fileOut.flush(); 
    fileOut.close(); 
    out.println("You have successfully upload the file:"+saveFile); 
    Connection connection = null; 
    String connectionURL = "jdbc:mysql://localhost:3306/test"; 
    ResultSet rs = null; 
    PreparedStatement psmnt = null; 
    FileInputStream fis; 
    try{ 
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    connection = DriverManager.getConnection(connectionURL, "root", "root"); 
    File f = new File(saveFile); 
    psmnt = connection.prepareStatement("insert into file(file_data) values(?)"); 
    fis = new FileInputStream(f); 
    psmnt.setBinaryStream(1, (InputStream)fis, (int)(f.length())); 
    int s = psmnt.executeUpdate(); 
    if(s>0){ 
    System.out.println("Uploaded successfully !"); 
    } 
    else{ 
    System.out.println("Error!"); 
    } 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
     } 
    } 
    } 
} 
関連する問題