序文
Webアプリケーションを開発するときは、ユーザーにアバターとしての画像のアップロードなどのアップロード機能を提供する必要があります。ファイルをアップロードするには、フォームのメソッドを投稿するように設定し、enctypeをmultipart/form-dataに設定する必要があります。この場合にのみ、ブラウザはユーザーの選択したファイルのバイナリデータをサーバーに送信します。この記事では、struts2フレームワークのアップロード関数の詳細な要約を示します。以下ではあまり言いません。詳細な紹介を一緒に見てみましょう。
struts2ファイルアップロード
Struts2は独自のリクエストパーサーを提供しません。つまり、Struts2はそれ自体でMultiPart/Form-Dataリクエストを処理しません。バイナリ要求データを解析するために他のアップロードフレームワークを呼び出す必要がありますが、Struts2は元のアップロードパーサーをさらにカプセル化し、ファイルのアップロードをさらに簡素化します。
default.properties構成ファイルのstruts2では、次のような構成コードを見ることができます。
### Parser HTTPの投稿リクエストを処理するParser、Mime-Type MultiPart/Form-Data#struts.multipart.parser = cos#struts.multipart.parser = pell#struts.multipart.parser = jakarta-streamstruts .multipart.multipart.parser = jakarta#usesesの#struts.multipart.multipart.parser = jakarta-sreamstruts. javax.servlet.context.tempdir by defaulttruts.multipart.savedir = struts.multipart.maxsize = 2097152
上記のコードは、主にStruts2にファイルをアップロードするときにアップロードパーサーを構成するために使用されます。 struts2のカプセル化は、基礎となるファイルアップロードコンポーネント間の違いを分離します。この構成ファイルのアップロードにリゾルバーが使用されている限り、開発者は異なるファイルアップロードフレームワークを簡単に切り替えることができます。
Struts2は、デフォルトでJakartaアップロードパーサーを使用します。もちろん、気に入らない場合は、他のものに切り替えることもできます。以下は、コードを介してStruts2に基づいた単純なファイルアップロード関数です。
ファイルアップロードのアクションを実装します
フロントデスクページ:
<form action = "upload" method = "post" enctype = "multipart/form-data">タイトル:<入力タイプ= "テキスト" name = "title"> <br> file:<入力タイプ= "ファイル" name = "upload"> <br>
アクションクラス:
Public Class UploadactionはActionSupportを拡張します{private string title;プライベートファイルのアップロード。プライベート文字列uploadContentType;プライベート文字列uploadFileName;プライベート文字列SavePath; public void setsavepath(string value){this.savepath = value; } private string getSavePath(){string realpath = servletactionContext.getServletContext()。getRealPath( "/web-inf/" + savepath); RealPathを返します。 } public void settitle(string value){this.title = value; } public string getTitle(){return title; } public void setupload(file value){this.upload = value; } public file getupload(){return upload; } public void setuploadcontenttype(string value){this.uploadcontenttype = value; } public string getFileContentType(){return uploadContentType; } public void setuploadfilename(string value){this.uploadfilename = value; } public string getuploadfileName(){return uploadFileName; } @Override public string execute()throws exception {fileoutputStream fos = new fileoutputStream(getSavePath() + "//" + getuploadfileName()); fileInputStream fis = new fileInputStream(getupload()); byte [] buffer = new byte [1024]; int len = 0; while((len = fis.read(buffer))> 0){fos.write(buffer、0、len); } fis.close(); fos.close();成功を返す; }}struts.xml構成ファイル:
<パッケージname = "upload" extends = "struts-default"> <action name = "upload"> <param name = "savepath">/upload </param> <result name = "success.jsp </result name> <result name =" input ">/index.jsp </result> </action> </package>
アクションクラスの場合、2つの特別なプロパティが含まれています。
これらの2つの属性は、アップロードされたファイルのファイル名とアップロードされたファイルのファイルタイプをカプセル化するために使用されます。 struts2の場合、フォームに名前属性xxxを持つファイルフィールドが含まれている場合、対応するアクションは、ファイルフィールドの情報をカプセル化するために3つの属性を使用する必要があります。
上記の開発プロセスを通じて、Struts2を介してファイルをアップロードすることは本当に簡単なことであることがわかります。私たちがする必要があるのは、アップロードされたファイルのファイルコンテンツに簡単にアクセスできるように、ファイルドメインを動作中のタイプファイルのプロパティに関連付けることです。 Struts2がマルチパートパーサーをどのように使用するかについては、開発者に対して完全に透明です。
ファイルフィルタリングを手動で実装します
多くの場合、Webアプリケーションでは、ユーザーが自由にアップロードできません。ユーザーがアップロードしたファイルの種類とファイルサイズを制限する必要があるため、ファイルアップロード中にファイルフィルタリングを実行する必要があります。これで、アップロードファイルフィルタリングを手動で実装します。
struts.xmlで新しいパラメーターを構成して、サポートされているアップロードタイプを示します。
<param name = "AlldyTypes"> image/png、image/gif、image/jpeg </param>
実行中の検証関数を追加します:
// @overridepublic void validate(){string filterResult = filterType(getAllowTypes()。split( "、")); if(filterResult!= null){addfielderror( "upload"、 "アップロードするファイルタイプは間違っています!"); }} public string filterType(string []型){string filetype = getFileContentType(); for(string type:types){if(type.equals(filetype)){return null; }} return error;}これは、タイプの判断を実装するだけで、ファイルクラスのlength()メソッドに基づいてサイズ検証を実装します。しかし、それはとても厄介です、より単純な声明について話しましょう。
インターセプターはファイルフィルタリングを実装します
Struts2はファイルアップロードのインターセプターを提供し、インターセプターを構成することでファイルフィルタリングをより簡単に実現できます。 struts2のファイルアップロードのファイルアップロード。インターセプターが機能するためには、アクションでインターセプター参照を構成するだけです。
Fileuploadインターセプターを構成する場合、2つのパラメーターを指定できます。
< /> <result name = "success">/success.jsp </result>
このようにして、構成の変更を実行できます。これは、コードを作成するよりもはるかに簡単です。
構成エラーメッセージ
アップロードエラーの場合、システムはデフォルトで英語のエラーメッセージをプロンプトします。ただし、国際的な迅速なメッセージを出力するには、次の2つの重要なメッセージ定義を国際リソース構成ファイルに追加する必要があります。
struts.messages.error.content.type.not.allowed =アップロードファイルタイプが正しくありません。もう一度アップロードしてくださいstruts.messages.error.file.too.large =アップロードしたファイルが大きすぎます。もう一度アップロードしてください次に、<s:fielderror/>を使用して、エラーメッセージを出力できます。
ファイルアップロードの定数構成
記事の冒頭で、 default.propertiesのstruts.multipart.saveDirについて説明します。では、この構成アイテムの特定の機能は何ですか?
struts2ファイルのアップロードのプロセス中に、アップロードプロセス中に生成された一時ファイルを保存するには、一時的なフォルダーを指定する必要があります。一時的なフォルダーが指定されていない場合、システムは、 javax.servlet.context.tempdir使用することを義務付けています。このstruts.multipart.savedirは、一時ファイルのストレージ場所を構成します。したがって、開発プロセス中に、ディレクトリに読み取りおよび書き込み許可があるかどうかに注意する必要があります。
また、アップロードされたファイルのサイズを表すstruts.multipart.maxSize構成もあります。この構成のMaximumsizeプロパティとFileuploadインターセプターの最大化プロパティが同時に指定されている場合、最初にstruts.multipart.maxSize構成の最大プロパティと比較され、次にfileuploadインターセプターの最大化プロパティと比較します。ファイルサイズがstruts.multipart.maxSizeのMaximumsize構成を超えると、例外が表示され、結果が入力に転送されません。これに注意を払ってください。
要約します
この記事では、Struts2のファイルのアップロードを詳細に要約しています。多くの内容があり、基本的にはマニュアルにはすべての内容があります。さて、マニュアルとして使用してください。
さて、上記はこの記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。