2

I want to upload the files into mysql database using jsp.When i use input type="file", jsp is not returning full path. i need full path to upload a file in mysql db.

<form id="translationFormID" method="post" action="saveTranslation">

<input type="file" name="attachCV" id="attachCVID" value="Attach CV">

<input type="submit" name="submit" />

</form>

This is my jsp page. i calling the servlet 'saveTranslation' using post method.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String attachCV=null;
    try{
        String attachCV=request.getParameter("attachCV");
        System.out.println("path= "+attachCV);
    }
    catch(Exception){
        e.printStackTrace();
    }
}

This is my servlet code. here getting and printing attachCV parameter. when i print the attachCV, its showing something like 'c:\fakepath\sample.docx'

4

3 に答える 3

4

mysql db にファイルをアップロードするにはフル パスが必要です。

ここに重大な思考ミスがあります。

がファイルをアップロードしたいクライアントであり、あなたがファイルのコンテンツを取得する必要があるサーバーであると想像してください。c:\path\to\sample.docxご要望どおり、ローカル ディスク ファイル システムのフル パスを唯一の情報として提供します。サーバーとしてコンテンツを取得するにはどうすればよいでしょうか。ローカル ハードディスク ファイル システムへのオープン TCP/IP 接続はありますか? 本当に?

これは、ファイルのアップロードの仕組みではありません。これは、サーバーがクライアントと物理的に同じマシンで実行されている場合にのみ機能するためFileInputStream、そのパスで使用できます。したがって、これはローカル開発環境でのみ機能しますが、サーバーがクライアントとは物理的に異なるマシンで実行され、HTTP 接続で分離されている実際の運用環境では確実に機能しません。

代わりに、クライアントが HTTP 要求本文とともに送信した唯一のファイルコンテンツに関心を持つ必要があります。<input type="file">HTML 用語では、これを で使用できます<form enctype="multipart/form-data">。完全なコード例を含むより詳細な回答は、次の場所にあります: How to upload files to server using JSP/Servlet? これは、最新の Servlet 3.0 の使用方法request.getPart()と、以前のデファクト スタンダードの Apache Commons FileUpload API について説明しています。

正しい方法で実装すると、最終的にInputStreamは Servlet 3.0part.getInputStream()または Apache Commons FileUploadから取得したファイルの内容を表す になりますitem.getInputStream()。その後PreparedStatement#setBinaryStream()、通常の方法で DB に格納し、DBResultSet#getBinaryStream()から取得できます。

于 2012-09-22T11:39:12.583 に答える
0

enctype = "multipart/form-data"確かに、 form タグに属性を追加する必要があります。次のコードはあなたの問題を解決します。

<form id="translationFormID" method="post" enctype="multipart/form-data"  
 action="saveTranslation">
    <input type="file" name="attachCV" id="attachCVID" value="Attach CV">
    <input type="submit" name="submit" />
</form>
于 2012-09-22T11:31:46.720 に答える
0

MultipartRequestサーブレットでファイルの内容を読み取るには、マルチパート データ ハンドラーを使用する必要があります。クライアントから返されるパスは常にクライアントにとってローカルなものであり、マルチパートの方法以外にファイルを読み取る方法はありません。SO 自体を検索して、マルチパート リクエスト ハンドラの他の代替手段を見つけることができます。

于 2012-09-22T11:36:45.100 に答える