前の記事の隣:
2。ファイルアップロードとダウンロード
Struts2、Page JSP -Configuration File Struts2.xml-およびアクションクラスアクションによって開発された3つのトリック
ファイルアップロード前提条件:
フォームフォームの方法は投稿する必要があります
フォームフォームのenctypeは、MultiPart/Form-Dataでなければなりません
type = "file"のアップロード入力フィールドを提供します
ファイルアップロードのサポートサポートのいくつかのルール
1.単一のファイルアップロード
開発手順:
1)commons-fileupload-1.2.1.jarとcommons-io-1.3.2.jarをWeb-inf/libの下に追加します。これらの2つのファイルは、http://commons.apache.org/からダウンロードできます。
2)ステップ2:upfile.jspを書き込み、フォームテーブルのenctypeを次のように設定します。
<%@ page Language = "Java" Import = "Java.util。*" PageEncoding = "UTF-8"%> <%@ taglib uri = "/struts-tags" s "%> <body> <s:actionerror/>> <hr/> <s:fielderror> </s:fielderror> <form> < action = "$ {pagecontext.request.contextpath}/upload1.action" method = "post" enctype = "multipart/form-data"> <! - passing in mime-> username:<input = "text" name "name" name = "username"/> <br/>美しい写真value = "upload"/> </form> </body>エラーページERER.JSPを書き込みます
<body>サーバーはビジーです。しばらくしてからもう一度やり直してください。 </body>
success.jsp
<body>正常にアップロード</body>
3)uploadaction1クラスを書き込む:アクションクラスに属性を追加すると、属性はフォームのファイルフィールドの名前に対応しています。
パッケージcom.itheima.actions; import java.io.file; Import java.io.ioexception; Import org.apache.commons.io.fileutils; import org.apache.struts2.servletactionContext; Import com.opensymphony.xwork2.actionsupport;プライベートファイル写真; //フォームのアップロードフィールド名と一致しています。タイプはファイルタイプですプライベート文字列photofileName; //通常のフィールド:system.out.println(username); //フィールドのアップロード:フォルダーにアップロードします。アプリケーションの画像に保存しますディレクトリ文字列realpath = servletactionContext.getServletContext()。getRealPath( "/images"); file directory = new File(RealPath); if(!directory.exists()){directory.mkdirs(); } try {fileutils.copyfile(photo、new file(directory、photofilename));成功を返す; } catch(ioexception e){e.printstacktrace();エラーを返します。 }}}struts.xmlファイルに次の構成を追加します
<アクションname = "upload1" method = "upload"> <interceptor-ref name = "defaultStack"> <param name = "fileupload.allowedtypes"> image/jpeg、image/png </param> <param = "fileupload.allowedextensionset"> jpg、jpeg、png </param> < <sults> /success.jsp </result> <result name = "error">/error.jsp </result name = "input">/index.jsp </result> </action>
原則分析:
a。 Fileuploadインターセプターは、ファイルのアップロード操作の処理を担当します。デフォルトのDefaultStack Interceptorスタックのメンバーです。インターセプターには、設定できる3つのプロパティがあります。
•最大値:アップロードされたファイルの最大長(バイト)、デフォルト値は2 MBです
•AlowtTypes:コンマで分離されたファイルのアップロードを許可するタイプ。
•Aldapextensions:ファイル拡張子をアップロードできます。これらの3つのプロパティは、各拡張機能を分離することにより、struts.xmlファイルで上書きできます。
b。サイズを超えるファイルまたは違法にアップロードすると、エラーが発生します(入力ビューをターン)
合格:
<s:actionerror/> <s:feilderror/>エラーメッセージを表示するためのヒント
c。エラーメッセージプロンプトを中国語版に変更する:国際メッセージリソースファイルの助けを借りて
グローバルデフォルトパラメーターの構成によってエラーが発生した場合、グローバルメッセージリソースファイルを使用することをお勧めします。
struts2のデフォルトのプロンプトリソースファイル:struts-message.properties file of struts2-core- **。jar。キー値を比較して、対応する値を上書きするだけです。
構成は次のとおりです。
struts.messages.error.uploading =エラーアップロード:{0}
struts.messages.error.file.too.large =ファイルが大きすぎる:{0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed = content-type許可:{0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed = file endixed not lotad:{0} "{1}" "{2}" {3}
{0}:<入力型= "file" name = "uploadimage"の名前属性の値>
{1}:アップロードされたファイルの本名
{2}:一時ディレクトリに保存されたアップロードファイルの名前
{3}:アップロードされたファイルのタイプ(struts.messages.error.file.too.largeのタイプは、アップロードされたファイルのサイズです)
ソースコード:
エラーを表示するリソースファイルの情報を変更する
ステップ1: fileuploadmessage.propertiesなどの新しいリソースファイルを作成するには、SRCの下に配置して、次の情報をリソースファイルに追加します
struts.messages.error.uploading =アップロードエラー:{0}
struts.messages.error.file.too.large =アップロードファイルが大きすぎる:{0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed =アップロードされたファイルのタイプは許可されていません:{0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed =アップロードされたファイルの接尾辞名は許可されていません:{0} "{1}" "{2}" {3}
ステップ2: struts.xmlファイルにリソースファイルをロードする
<! - ファイルのアップロードに関するエラー情報のためにリソースファイルを構成 - >
<constant name = "struts.custom.i18n.resources" value = "cn….xxx.fileuploadmessage"/>
2。複数のファイルをアップロードします
複数のファイルをアップロードすると、配列またはリストを使用できます。他のファイルは単一のファイルアップロードに似ています。
パッケージcom.itheima.actions; import java.io.file; import java.io.ioexception; import org.apache.commons.io.fileutils; Import org.apache.struts2.servletactionContext; Import com.opensymphony.xwork2.actionsupport;プライベートファイル[]写真; //フォームのアップロードフィールド名と一致しています。タイプはファイルタイプです。Arrayまたはリストプライベート文字列[] PhotofileName; //ファイル名プライベート文字列[] PhotoTontentType; //ファイルmimeタイプpublic string upload(){//アップロードフィールド:フォルダーにアップロードします。アプリケーションの画像に保存しますディレクトリ文字列realpath = servletactionContext.getServletContext()。getRealPath( "/images"); file directory = new File(RealPath); if(!directory.exists()){directory.mkdirs(); } try {for(int i = 0; i <photo.length; i ++){fileutils.copyfile(photo [i]、new file(directory、photofilename [i])); }成功を返す; } catch(ioexception e){e.printstacktrace();エラーを返します。 }}}3。ファイルのダウンロード
原則:Struts2は、ファイルのダウンロード機能をサポートするために特別に使用される指定されたストリーム結果タイプであるストリーム結果タイプを提供します。指定する入力名パラメーターが必要です。このパラメーターは入力ストリームを指定し、ダウンロードしたファイルへのエントリを提供します。
コーディング手順:
1)アクションクラスのダウンロード:
パッケージcom.itheima.actions; import java.io.file; import java.io.fileinputStream; Import java.io.fileenotfoundexception; Import java.io.inputStream; Import java.net.urlencoder; Import org.apache.commons.io.filenameutils; org.apache.struts2.servletactionContext;インポートcom.opensymphony.xwork2.actionsupport; public class downloadaction extends actionsupport {private inputstream image; //問題のあるプライベート文字列ファイル名で使用; //ファイル名プライベートロングファイルサイズ; public inputstream getImage(){return image; } public void setimage(inputstream image){this.image = image; } public string getFileName(){return filename; } public long getFilesize(){return filesize; } public string download()throws exception {//値を画像バイトに割り当てるストリームストリングwring fileerealpath = servletactionContext.getServletContext()。getRealPath( "/web-inf/classes/如.jpg"); filename = filenameutils.getName(fileRealPath); //方法1:中国のファイルはurl encoded // filename = urlencoder.encode(filename、 "utf-8"); filesize = new file(filerealPath).Length(); System.out.println(filename); image = new FileInputStream(fileRealPath);成功を返す; }}struts.xml構成ファイル:主にストリームタイプの結果を構成する
<struts> <constant name = "struts.devmode" value = "true" /> <constant name = "struts.ognl.AllowstaticMethodaccess" value = "true" /> <action name = "download" method "> <ression type =" stream "> <param name =" inputname ">画像inputStream - > <param name = "contentType"> application/octet-stream </param> <! - ブラウザー応答ヘッダー、ファイルのmime形式を伝え、アクション中のgetContentTypeメソッドを呼び出します - > <! - struts.xmlでOGNL式を使用して、アクションクラスの値を取得します。アクションクラスでgetFileName()を呼び出します - > <! - 中国語ファイル名エンコード:方法2。OGNL式を使用して、urlencode-> <! - default ognl呼び出しの静的メソッドを呼び出しますstaticメソッドは実行できません。定数switch.struts.ognl.allowstaticmethodaccess = true-> <param name = "contentDisposition"> attachment; filename = $ {@java.net.urlencoder@encode(filename、 'utf-8')}} </param> < name = "contentlength"> $ {filesize} </param> </result> </action> </package> </struts>インターセプターとファイルのアップロードはここで終了します。それはとても疲れていますが、達成に満ちています。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。