B/Sシステムで作業する場合、通常、ファイルのアップロードとファイルのダウンロードが含まれます。 Struts2フレームワークに接続する前に、Apacheの下のCommons SubprojectのFileuploadコンポーネントを使用してファイルをアップロードします。ただし、そうすれば、コードは面倒で柔軟性がないように見えます。 Struts2を学習した後、Struts2はファイルのアップロードとダウンロードのためのより良い実装メカニズムを提供します。ここでは、シングルファイルのアップロードとマルチファイルアップロードのソースコードについて説明します。ここでは、ファイルのダウンロードでアップロードされた2つのJARファイルをインポートする必要があります。1つはCommons-Fileupload-1.2.2.2.jar、もう1つはCommons-Io-2.0.1.jarです。
struts2シングルファイルアップロード:
まず、JSPファイルのアップロードページがあります。これは比較的簡単で、ファイルアップロードボックスを備えたフォームです。
<! - ファイルをアップロードするときは、ファイルをアップロードするときにバイナリファイルが非常に大きくなる可能性があるため、フォーム送信方法を投稿する必要があります。 Enctype属性もあります。この属性はMultiPart/Form-Dataとして記述する必要があります。そうしないと、バイナリテキストのサーバーにアップロードされます - > <form Action = "fileupload.action" method = "post" enctype = "multipart/form-data"> username:<入力タイプ= "テキストname =" username "> <br>ファイルvalue = "submit"> </form>
次は、コードのfileuploadaction部分です。 Struts2は、アップロードとダウンロードのための優れたインターンシップメカニズムを提供するため、動作中のコードをほとんど記述する必要があります。
public class fileuploadactionはactionsupportを拡張します{private string username; //ファイルは、フロントエンドJSPによってアップロードされたファイル自体を参照していませんが、ファイルがアップロードして一時フォルダーのプライベートファイルファイルに保存されます。 //ファイルの名前がprivate string filefileNameを送信しました。 //ファイルのmimeタイプ提出されたprivate string filecontenttype; public string getUsername(){return username; } public void setUsername(string username){this.username = username; } public file getFile(){return file; } public void setFile(file file){this.file = file; } public string getFileFileName(){return filefileName; } public void setFileFileName(String FileFileName){this.filefileName = fileFileName; } public string getFileContentType(){return fileContentType; } public void setFileContentType(String fileContentType){this.filecontentType = fileContentType; } @Override public string execute()throws exception {string root = servletactioncontext.getServletContext()。getRealPath( "/upload"); inputstream is = new fileInputStream(file); outputStream os = new fileoutputStream(new file(root、filefileName)); system.out.println( "filefileName:" + fileFileName); //ファイルは一時的なフォルダーに保存されているファイルであるため、ファイル名とファイルパスを印刷して、以前のfilefileName system.out.println( "file:" + file.getName())と同じかどうかを確認できます。 System.out.println( "file:" + file.getPath()); byte [] buffer = new byte [500]; int length = 0; while(-1!=(length = is.read(buffer、0、buffer.length))){os.write(buffer); } os.close(); is.close();成功を返す; }}まず、ここのファイルがJSPによってアップロードされたファイルを実際に参照していないことを明確にする必要があります。ファイルがアップロードされると、Struts2はまずstruts.multipart.savedirで指定されたストレージ場所を探します(これはdefault.propertiesです)。新しいstruts.propertiesプロパティファイルを作成して、一時的なファイルストレージの場所を指定できます。指定されていない場合、ファイルはTomcatのApache-Tomcat-7.0.29/work/catalina/localhost/ディレクトリに保存されます。次に、ファイルをアップロードした後にストレージの場所を指定し、出力ストリームを通ってストリームに書き込むだけです。この時点で、フォルダーにアップロードしたファイルを見ることができます。
ファイルをアップロードした後、ダウンロードする必要があります。実際、Struts2をダウンロードするという原則は非常に簡単です。入力ストリームを定義し、ファイルを入力ストリームに書き込むことです。キー構成は、まだstruts.xml構成ファイルで構成することです。
FileDownLoadactionコードは次のとおりです。
public class filedownloadactionはactionsupportを拡張します{public inputstream getdownloadfile(){return servletactionContext.getServletContext()。 } @Override public string execute()throws Exception {return success; }}このアクションが入力ストリームを定義するだけで、ゲッターメソッドを提供することを見てみましょう。次に、struts.xmlの構成ファイルを見てみましょう。
<action name = "filedownload"> <result name = "success" type = "stream"> <param name = "contentdisposition"> attachment; filename = "filename =" filename = "filename =" 9月4日 "</param> <param name =" inputname "> downloadfile </param> </result> </action>
struts.xml構成ファイルに注意を払う必要があるものがいくつかあります。まず、結果のタイプ。過去には、アクションを定義しました。基本的に、結果にタイプ属性を記述しませんでした。この属性に加えて、通常、リダイレクト(リダイレクト)などの値があります。ここでは、ファイルのダウンロードを使用しているため、タイプはストリームタイプとして定義され、アクションを伝える必要があります。これは、ファイルのダウンロードの結果です。通常、結果要素にはパラマリックサブエレメントがあります。これは、ファイルをダウンロードするときにパラメーターを設定するために使用されます。 eこのプロパティは、ファイル入力ストリームを動作させることです。名前は、アクション中の入力ストリーム属性と同じでなければなりません。次に、ContentDisposition属性はContentDisposition属性です。このプロパティは、通常、ダウンロードされたファイルの処理方法を指定するために使用されます。値が添付の場合、ダウンロードボックスがポップアップし、ユーザーがダウンロードするかどうかを選択できるようにします。この値が設定されていない場合、ブラウザは最初にダウンロードされたファイルを開くかどうかを確認します。可能であれば、ダウンロードされたファイルを直接開きます(もちろん、これは必要なものではありません)。別の値はファイル名です。これは、ダウンロード時にファイルによってプロンプトされたファイルのダウンロード名です。この情報を構成した後、ファイルのダウンロード機能を実装できます。
struts2複数のファイルアップロード:
実際、マルチファイルアップロードの原理は、単一のファイルアップロードと同じです。単一のファイルアップロードは単一のファイルであり、リスト<ファイル>コレクションまたはファイル[]配列がアップロードされます。まず、フロントエンドのJSPパーツのコードを見てみましょう。ここでは、jQueryを使用して動的ファイルの追加と動的削除ボックスを削除します。
<script type = "text/javascript" src = "script/jquery-1.8.1.js"> </script> <スクリプトタイプ= "text/javascript"> $(function(){$( "#button")。 value = 'delete'> <br> "); $("#body div ")。append(html).append(button); button.click(function(){html.remove(); button.remove();})})})</script> </head> <body id =" body "fileupload2." pos enctype = "multipart/form-data"> username:<入力タイプ= "text" name = "username"> <br> file:<input type = "file" name "file"> <入力タイプ= "ボタン" value = "button"> <br> <br> <div> </div> <入力タイプ= "ファイルの名前にはファイルという名前にする必要があり、次に複数のファイルをアップロードするためのアクションコードは次のとおりです。
public class fileuploadaction2はactionsupportを拡張します{private string username; //ここでは、リストを使用してアップロードされたファイルを保存します。ファイルは、実際にアップロードされたファイルプライベートリスト<ファイル>ファイルではなく、一時的なファイルを一時的なフォルダー内の一時ファイルも指します。 //このリストは、リストのファイルに対応するファイルの名前を保存します<ファイル>プライベートリスト<String> fileFileName;プライベートリスト<String> fileContentType; public string getUsername(){return username; } public void setUsername(string username){this.username = username; } public list <file> getFile(){return file; } public void setFile(list <file> file){this.file = file; } public List <String> getFileFileName(){return filefileName; } public void setFileFileName(List <String> fileFileName){this.filefileName = fileFileName; } public List <String> getFileContentType(){return fileContentType; } public void setFileContentType(List <String> fileContentType){thil.fileContentType = fileContentType; } @Override public string execute()throws exception {string root = servletactioncontext.getServletContext()。getRealPath( "/upload"); for(int i = 0; i <file.size(); i ++){inputstream is = new fileinputStream(file.get(i)); outputStream os = new fileoutputStream(new file(root、filefileName.get(i))); byte [] buffer = new byte [500]; @suppresswarnings( "unsused")int length = 0; while(-1!=(length = is.read(buffer、0、buffer.length))){os.write(buffer); } os.close(); is.close(); }成功を返す; }}これはまた、それを出力ストリームに書き込み、フォルダに複数のアップロードされたファイルを見ることができるようにします
次のファイルのダウンロードは、今すぐファイルのダウンロードとまったく同じであり、同じことがstruts.xmlなので、ここでは繰り返しません。
概要:一般に、Struts2が提供するファイルのアップロードおよびダウンロードメカニズムは、多くのコードを簡素化します。将来のプロジェクトでこのメカニズムを使用できます。 Fileuploadコンポーネントを使用してファイルをアップロードすることもできます。これはすべて個人的な好みによって決定されます!
Javawebのファイルアップロードとダウンロード関数についてはそれほど多くのコンテンツしかありません。ご覧いただきありがとうございます。