1。ファイルアップロードの原則
1。ファイルアップロードの前提条件:
a。フォームフォームの方法は投稿する必要があります
b。フォームフォームのenctypeは、MultiPart/Form-Dataでなければなりません(POSTリクエストメソッドとリクエストボディのデータ型を決定します)
c。フォームで提供される入力のタイプは、ファイルタイプファイルアップロードドメインです。
2。サードパーティコンポーネントを使用して、ファイルのアップロードを実現します
1。Commons-Fileuploadコンポーネント:
瓶:Commons-Fileupload.jar
Commons-Io.jar
2。コアクラスまたはインターフェイス
DiskFileItemFactory:環境を設定します
public void setsizetheshold(int syzethreshold):バッファサイズを設定します。デフォルトは10kbです。
アップロードされたファイルがバッファサイズを超えると、Fileuploadコンポーネントは一時ファイルキャッシュを使用してファイルをアップロードします
public void setRepository(java.io.fileリポジトリ):一時ファイルが保存されている場所にディレクトリを設定します。デフォルトでは、システムの一時ファイルストレージディレクトリ。
servletfileupload:コアアップロードクラス(メイン関数:リクエストのボディコンテンツを解析)
Boolean IsMultiPartContent(httpservletrequest?request):ユーザーのフォームのenctypeがMultiPart/Form-Dataタイプであるかどうかを判断します。
リストParserequest(httpservletrequestリクエスト):リクエストボディのコンテンツを解析する
SetFilesizeMax(4*1024*1024); //単一のアップロードされたファイルのサイズを設定します
upload.setsizemax(6*1024*1024); //合計ファイルサイズを設定します
fileItem:フォームの入力フィールドを表します。
Boolean isformfield():それは通常のフィールドですか
文字列getFieldName:通常のフィールドのフィールド名を取得します
string getString():通常のフィールドの値を取得します
inputstream getInputStream():アップロードされたフィールドの入力ストリームを取得します
string getName():アップロードされたファイル名を取得します
例:最初にWeb-INFディレクトリにファイルフォルダーを作成します。つまり、すべてのファイルをここにアップロードする必要があります。これは、他のファイルによる直接アクセスを避けるためです。
1.ファイルの実際のパスを取得します
string storepath = getServletContext()。getRealPath( "/web-inf/files");
2。環境を設定します
DiskFileItemFactory Factory = new DiskFileItemFactory(); //デフォルトのキャッシュと一時ファイルストレージ場所はここで
3.フォーム配信方法を判断します
boolean ismultipart = servletfileupload.ismultipartcontent(request); if(!ismultipart){system.out.println( "アップロードメソッド間違って!");戻る; }4.ファイルコアクラスをアップロードします
servletfileupload upload = new servletfileupload(Factory); 5。分析// parse list <fileitem> items = upload.parserequest(request); for(fileItem item:item){if(item.isformfield()){// rearming fieldname form = item.getfieldname(); // form informing string fieldvalue = item.getString(); //情報フィールド値System.out.println(fieldname+"="+fieldValue); } else // file processing {inputstream in = item.getInputStream(); //ファイル名c:/users/administrator/desktop/a.txt文字列name = item.getname(); // A.txt文字列filename = name.substring(name.lastindexof( "//")+1)が必要です。 //出力ストリームString StoreFile = storePath+"//"+filename; //ファイルのsaveアドレスをアップロードしますoutputStream out = new fileoutputStream(storeFile); byte [] b = new byte [1024]; int len = -1; while((len = in.read(b))!= -1){out.write(b、0、len); } in.close(); //ストリームを閉じますout.close(); }}フォームを書いてください
<%@ page Language = "Java" Import = "Java.util。*" PageEncoding = "Utf-8"%> <%string path = request.getContextpath(); string basepath = request.getscheme()+"://"+request.getServername()+":"+request.getServerport( " - // W3C // DTD HTML 4.01 Transitional // En"> <HTML> <head> <head> <base href = "<%= basepath%>"> <title> my jsp '1.jsp'スタートページ</title> <meta http-equiv = "pragma" content = "no-cache"> <meta http-equiv " content = "no-cache"> <meta http-equiv = "compers" content = "0"> <meta http-equiv = "keywords" content = "keyword1、keyword2、keyword3"> <meta http-equiv = "description" content = "this is my page"> <! href = "styles.css"> - > </head> <body> <form action = "$ {pagecontext.request.contextpath}/servlet/uploadservlet2" methed = "post" enctype = "multipart/form-data"> username <input = "text" name "/>> <br/ name = "f1"/> <br/> <入力タイプ= "ファイル" name = "f2"/> <br/> <入力タイプ= "balue =" save "/> </form> </body> </html>提出サーブレットを書き込む:uploadServlet2
パッケージcom.liuzhen.upload; Import java.io.fileoutputStream; Import java.io.ioexception; Import java.io.inputStream; Import java.OutputStream; Import java.util.list; Import javax.servlet.servletexception; javax.havax.servletelet.htptp. javax.servlet.http.httpservletrequest; Import javax.servlet.http.httservletresponse; Import org.apache.commons.fileupload.fileitem; Import org.apache.commons.fileupload.fileuploadexception; org.apache.commons.fileupload.disk.diskfileitemfactory; Import org.apache.commons.fileupload.servlet.servletfileupload; //ファイルアップロードアップロードアップロードアップロードUploadServlet2拡張httpservlet {public void doget servletexception、ioexception {//エンコードrequest.setcharacterencoding( "utf-8"); Response.setContentType( "text/html; charset = utf-8"); try {//ファイル文字列をアップロード= getServletContext()。getRealPath( "/web-inf/files"); //環境の設定DiskFileItemFactory = new DiskFileItemFactory(); //フォーム送信方法form enctype = multipart/form-data boolean ismultipart = servletfileupload.ismultipartcontent(request); if(!ismultipart){system.out.println( "アップロードメソッドは間違っている!");戻る; } servletfileupload upload = new servletfileupload(Factory); // parse list <fileitem> items = upload.parserequest(request); for(fileItem item:item){if(item.isformfield()){// rearming fieldname form = item.getfieldname(); // form informing string fieldvalue = item.getString(); //情報フィールド値System.out.println(fieldname+"="+fieldValue); } else // file processing {inputstream in = item.getInputStream(); //ファイル名c:/users/administrator/desktop/a.txt文字列name = item.getname(); // A.txt文字列filename = name.substring(name.lastindexof( "//")+1)が必要です。 //出力ストリームString StoreFile = storePath+"//"+filename; //ファイルのsaveアドレスをアップロードしますoutputStream out = new fileoutputStream(storeFile); byte [] b = new byte [1024]; int len = -1; while((len = in.read(b))!= -1){out.write(b、0、len); } in.close(); //ストリームを閉じますout.close(); }}} catch(fileuploadexception e){新しいruntimexception(e); }} public void dopost(httpservletrequest request、httpservletResponse応答)servletexception、ioexception {doget(request、response); }}アップロードされたファイルはTomcatアプリケーションにあります。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。