一般に、画像をアップロードするには2つの方法があります。 1つは画像ファイルをデータベースに書き込むことであり、もう1つはサーバーファイルディレクトリに保存することです。データベースに書き込まれた画像ファイルは、データベーススペースを占有するバイナリストリーム形式に変換する必要があり、少数の画像の保存に適しています。たとえば、システム内のいくつかの小さなアイコンには、データベースに記述するという利点がありますが、それらは比較的安全であり、誤ってユーザーが簡単に削除することはできません。
多数の画像を保存すると、通常、サーバー上のフォルダーに保存するために行われます。アップロードを完了するには多くの方法があります。ストリーミングメソッドとFTPメソッドを使用でき、FileuPloadメソッドはここで使用されます。
システムサイズが異なると、画像ファイルの処理方法も異なります。システム内の写真の数が大きくない場合は、すべての写真を同じディレクトリに保存するだけです。写真がもっと蓄積されている場合は、マテリアル分類に従って写真を分類および保存できます。これにより、ディスク上のファイルの検索が時間を節約できます。
写真をファイルにアップロードするときは、画像をディレクトリに直接アップロードしたり、画像ファイル名とファイルパスをデータベースに書き込むことも、プログラム内のファイルパスを動的に作成することもできます。会社が特別なサーバーに画像を保存する必要がある場合、ファイルパスを完全なファイルに書き込む方が適切です。一般に、材料(材料)が写真に対応する場合、処理が簡単です。複数の写真に対応する場合は、リサイクルと組み合わせて使用する必要があります。一方では、画像の動的表示を処理する必要があり、他方では、画像ファイルの命名が複製されているかどうかを確認する必要があります。さらに、画像を処理する場合(アップロード、削除、変更)、トランザクションに協力する必要があります。
以下は、FileuPloadを使用して画像のアップロードを実現する最も基本的な実装の重要な紹介です。
1.フロントエンドでファイルタグを使用します。
<入力名= "filename" type = "file" class = "text1" size = "40" maxlength = "40">
2.ファイルのenctype形式を設定します:multipart/form-data
<form name = "itemform"ターゲット= "_ self" id = "itemform" method = "post" action = "servlet/item/fileuploadservlet" enctype = "multipart/form-data">
enctype = "multipart/form-data"に関する指示:
この形式がJSPで使用されている場合、対応するサーブレットはrequest.getParameter()を使用してパラメーターを取得できません。 ServletFileuploadオブジェクトのParserequestメソッドを使用して、最初にリクエストオブジェクトのデータを解析し、解析された要素のiSFormfieldフラグを使用し、GetFieldNameメソッドと協力してデータを取得する必要があります。
3。fileuploadServletの実装:
パッケージcom.bjpowernode.drp.basedata.web; java.io.fileをインポートします。 java.io.ioexceptionをインポートします。 java.util.iteratorをインポートします。 java.util.listをインポートします。 javax.servlet.servletexceptionをインポートします。 javax.servlet.http.httpservletをインポートします。 javax.servlet.http.httpservletrequestをインポートします。 javax.servlet.http.httpservletResponseをインポートします。 org.apache.commons.fileupload.fileitemをインポートします。 org.apache.commons.fileupload.disk.diskfileitemfactoryをインポートします。 Import org.apache.commons.fileupload.servlet.servletfileupload; com.bjpowernode.drp.badeddata.manager.itemmanagerをインポートします。 com.bjpowernode.drp.badeddata.manager.itemmanagerimplをインポートします。 com.bjpowernode.drp.util.applicationexceptionをインポートします。 public class fileuploadservletは、abstractitemservletを拡張します{private file uploadpath;プライベートファイルのテンパス; @Override public void init()throws servletexception {//システムが起動したら、初期化を開始します。初期化中に、画像がアップロードされているフォルダーと、一時ファイルが保存されているフォルダーが存在するかどうかを確認します。存在しない場合は、//ルートディレクトリに対応する実際の物理パスを取得しますuploadpath = new file(getServletContext()。getRealPath( "upload")); System.out.println( "uploadPath ====" + uploadPath); //ディレクトリが存在しない場合(!uploadpath.exists()){//ディレクトリuploadpath.mkdir(); } // Companial Directory //ファイルtempfile = new file(item.getName())construment contiart object temppath = new file(getServletContext()。getRealPath( "Temp")); if(!temppath.exists()){temppath.mkdir(); } //親クラスのメソッドが表示されない場合、ItemManagerインスタンスはありません。これにより、null pointer super.init()が発生します。 } public void doget(httpservletrequest request、httpservletresponse応答)servletexception、ioexception {dopost(request、response); } public void dopost(httpservletrequest request、httpservletresponse応答)servletexception、ioexception {// item_upload.jspからデータを取得します。 req.getParameter()// string itemno = req.getParameter( "itemno"); //system.out.println("itemno====== " + itemno); /******************************************* fileuploadコンポーネントを使用してフォームを解析します***************************** // DiskFileItemFactory:FileItemオブジェクトの工場を作成します。この工場クラスでは、メモリバッファーサイズと、一時ファイルが保存されているディレクトリを構成できます。 DiskFileItemFactory Factory = new DiskFileItemFactory(); //メモリファクトリーに保存される最大サイズ。SetsizethReshold(4096); // getSizethReshold()factory.setrepository(temppath)よりも大きいデータを保存する場所。 // servletfileupload:アップロードされたファイルデータを処理し、データの各部分をfileitemオブジェクトにカプセル化する責任があります。 //アップロードされたファイルデータを受信すると、コンテンツはメモリキャッシュに保存されます。ファイルコンテンツがDiskFileItemFactoryで指定されたバッファーのサイズを超えると、//ファイルはディスクに保存され、DiskFileItemFactoryの指定されたディレクトリに一時ファイルとして保存されます。 //ファイルデータが受信された後、Servletuploadはファイルからファイルにデータをファイルにファイルに書き込み、servletfileupload upload = new servletfileupload(Factory); // fileuploadexceptionがupload.setsizemax(1000000 * 20)をスローする前の最大サイズ; / *******************フォームで渡されたデータを解析し、リストコレクションデータタイプを返します:fileItem ***************/ try {list fileitems = upload.parserequest(request);文字列itemno = ""; // iterator iter = fileItems.iterator()そのiterator //iter.hasnext()sequenceに(iterator iter = fileitemsemsetorator(); iter.hasnext();){// sequence fileitem item itemの次の要素を取得します。 //ファイルまたはテキスト情報であるかどうかを判断します}} // IT入力フィールドif(!item.isformfield()){//アップロードされたファイル文字列filename = item.getName(); long size = item.getSize(); //ファイルが選択されているかどうかを決定する場合((filename == null || filename.equals( ""))&& size == 0){継続; } //次のような文字列をインターセプトします:C:/Windows/debug/passwd.log filename = filename.substring(filename.lastindexof( "//") + 1、filename.length()); //サーバーの物理ディスクにファイルを保存します:最初のパラメーターは:フルパス(ファイル名を除く)です。 2番目のパラメーターは次のとおりです。ファイル名//item.write(file); //ファイル名を変更し、マテリアル名は同じであり、ファイル拡張子はgif //item.write(new file(uploadpath、itemno + ".gif"))であることを余儀なくされます。 //ファイル名項目を変更せずにファイルをディレクトリに保存します。 //画像ファイル名をデータベースitemmanager.uploaditemimage(itemno、filename)に書き込みます。 }} respons.sendredirect(request.getContextPath() + "/servlet/item/searchItemServlet"); } catch(Exception e){e.printstacktrace();新しいApplicationException( "アップロードfailed!"); }}}このクラスはAbstractItemServletを継承します:すべての素材の抽象親クラス、ItemManagerのインスタンス化を担当します
/** *すべてのマテリアルサーブレットの抽象的な親クラスは、ItemManagerのインスタンス化に責任があります * @author limin * */public abstract class abstractitemservletはhttpservletを拡張します{//スレッドセーフではありませんが、読み取り専用である場合、エラー保護されたアイテムマネージャー= null; @Override public void init()throws servletexception {itemmanager = new itemmanagerimpl()}}}ItemManagerimplは、ItemManagerインターフェイスを実装するサブクラスです。この設計モデルには給与の最適化がある問題が1つありますが、ここでは、写真のアップロードを説明するための無関係な発言をしません。
要約:
init()初期化方法について:
サーブレットが初期化されると、ディレクトリは動的に作成されます。 TomcatのWebAppsの下にあるプロジェクトとディレクトリへのアップロードと一時的なファイルのテンパスを次に示します。
ここではsuper.init()メソッドを呼び出す必要があることは注目に値します(Superは親クラスオブジェクトへの参照ではなく、親クラスメソッドへの呼び出しの責任があります)。
アップロードは、3つのステップでおおよそ実行されます。fileuploadコンポーネントを使用してフォームを解析します。フォームで渡されたデータを解析し、リストコレクションデータタイプ:fileItemを返します。最後に画像をアップロードします。
fileItem's isformfield()メソッドを使用して、通常のテキストかファイルかを決定します。
fileitem.write(new file(uploadpath、filename))を使用して、ファイルをアップロードします。最初のパラメーターは次のとおりです。フルパス(ファイル名を除く)。 2番目のパラメーターは次のとおりです。ファイル名。
通常のテキストデータの処理:
if( "itemno" .equals(item.getfieldname())){itemno = item.getString(); }アップロードは長年にわたって比較的成熟したテクノロジーであり、毎日のプロジェクトで直接使用できる多くのパッケージ化された技術がありますが、いくつかの基本原則を理解することが不可欠です。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。