まず、Struts2のインスタンス実装のアップロードとダウンロードの原則について話しましょう:
Struts 2は、Commons Fileuploadファイルを介してアップロードされます。
Commons Fileuploadは、fileuploadインターセプターを使用して、HTTPのデータを一時フォルダーに保存することにより、ファイルをアクションのインスタンスにバインドし、StrutsはFileupload Interceptorを使用します。したがって、ブラウザによってアップロードされたファイルをローカルファイルで操作できます。
特定の実装:
1. index.jspページを作成します
<body> <s:form action = "upload" method = "post" theme = "simple" enctype = "> <table align =" center "> <tr> <td> select upload </td> <td id =" more "> <s:file name =" file "> </s:ファイル> <入力タイプ=" </td> </tr> <tr> <td> <s:submit type = "button" value = "inclick =" return checkf() "/> </td> <td> <td> <s:reset> </td> </tr> </table> <table =" href = "<s:url value = 'download.action'> <s:param name = 'filename'> test.txt </s:param> </s:url>">ダウンロード</a> </td> </tr> </s:form> </body>
result.jspページを作成します
<body> <s:form> <div style = "border:1px solid black">ファイルアップロードされたファイル:<br> <ul style = "list-style-type:decimal"> <s:iterator value = "#request.filename" id = "file" status = "status"> <li> <s:iTerator> </</</</> <
もちろん、各ページにstruts2タグリファレンスを追加することを忘れないでください<%@taglib prefix = "s" uri = "/struts-tags"%>
2。updown.jsファイルを作成し、index.jspで参照してください
function checkf(){var files = document.getElementsbyname( "file"); if(files [0] .value.length!= 0){return true; } else {alert( "ファイルを選択してください"); falseを返します。 }} function addmore(){var td = document.getElementById( "more"); var br = document.createelement( "br"); var input = document.createelement( "input"); var button = document.createelement( "input"); input.type = "file"; input.name = "file"; button.type = "button"; button.value = "remove"; button.onclick = function(){td.removechild(br); td.RemoveChild(入力); td.RemoveChild(ボタン); } td.AppendChild(BR); TD.AppendChild(入力); TD.AppendChild(ボタン); } 3. updownloadaction.javaを作成します
パッケージcom.action; import java.io.file; import java.io.fileinputStream; Import java.io.filenotfoundexception; Import java.io.fileoutputStream; Import java.io.inputStream; Import java.OutputStream; Import java.io.unsportedencodinexexception; javax.servlet.http.httpservletrequest; Import com.opensymphony.xwork2.actionsupport; Import org.apache.struts2.servletactionContext; public class updownloadactions Actionsupport {private static final long serialvorsionuid = 1l;プライベートリスト<ファイル>ファイル; // jspプライベートリストのファイルタグに対応するプライベートリスト<string> filefileName; // private list <string> filecontenttype; // private string filename; // jsp @suppresswarnings( "Deprecation")//ファイルファイルアップロードUploadFiile( ServletactionContext.getServletContext()。getRealPath( "/upload"); // path system.out.println(root); inputstream inputstream;ファイルdestfile; outputStream OS; for(int i = 0; i <file.size(); i ++){inputstream = new fileinputStream(file.get(i)); destfile = new file(root、this.getFilefileName()。get(i)); os = new fileoutputStream(destfile); byte [] buffer = new byte [400]; int length = 0; while((length = inputstream.read(buffer))> 0){os.write(buffer、0、length); } inputstream.close(); os.close(); } httpservletrequest request = servletactionContext.getRequest(); request.setattribute( "filename"、filefileName);成功を返す; } //ファイルをダウンロードpublic inputstream getDownLoadFile()throws filenotFoundException、unsupportedencodingException {system.out.println(getFileName()); //ダウンロードファイル名が中国語の場合、Conversion Conversion ServletactionContext.GetResponse()。SetheAder( "Content-Disposition"、 "Attachment; filename =" + java.net.urlencoder.encode(filename、 "utf-8"))を実行するConversion servletactioncontext.getResponse()を実行します。 inputstream inputstream = new fileInputStream( "f:/" //絶対パスを使用して、このパス + this.getFileName())から「test.txt」ファイルをダウンロードします。 System.out.println(inputstream); inputstreamを返します。 } // public String downloadfile()throws exception {return success; } public string getFileName()throws unsupportedencodingException {return filename; } public void setFileName(String filename)Sthows unsupportedencodingException {this.fileName = new String(filename.getBytes( "iso8859-1")、 "utf-8"); }}注:属性のGETおよびセットメソッドは省略されています。
第4に、最後に構成ファイル
1。web.xml構成
<filter> <filter-name> struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.filterdispatcher </filter-class> </filter> <filter-mapping> <filter-name> struts2 </filter-name> <url-pattern>/*</url-perthn> </filter-mapping>
2。Struts.xml構成
<struts> <constant name = "struts.i18n.encoding" value = "utf-8"> </consting name = "struts.multipart.savedir" value = "f:/"> </constant> <package name = "struts2" extends = "struts-default"> <cuploadfiile "> < name = "success">/jsp/result.jsp </result> <interceptor-ref name = "fileupload"> <! - maximumsize(optional) - このインターセプター(バイト単位)によって許可されているアクションにアップロードされたファイルの最大長。このパラメーターは、webwork.propertiesで定義されているプロパティとは何の関係もないことに注意してください。デフォルトは2MB - > <param name = "maximumsize"> 409600 </param> <! - apporttypes(optional) - コンテンツタイプタイプ(テキスト/HTMLなど)のコンマ分離リスト。これらのリストは、このインターセプターがアクションに渡すことを許可するコンテンツタイプです。指定されていない場合、任意のアップロードタイプが許可されています。-> <param name = "approadTypes"> text/plain </param> </interceptor-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> </action> <action name = "download" method = "download file"> <defults "typep"> ">"> ">"> ">"> - > <param name = "contentType"> application/txt; </param> <! - ダウンロードされたファイル名と表示方法を指定しますが、中国名の文字化けコードに注意してください。解決策は、エンコード処理 - > <! - コンテンツデスポジションは、インラインと添付ファイルを含むファイルダウンロードの処理方法です。デフォルトはインラインです。添付ファイルを使用する場合、次のように構成されます:添付ファイル; filename = "filename"。 - > <param name = "contentDisposition"> attachment; filename = "$ {filename}" </param> <! - getDownLoadFile()メソッドから入力ストリームを取得 - > <param name = "inputName"> downloadfile </downloadfile </param> <! - ダウンロードされたファイルのキャッシュサイズを指定 - > </package> </struts>シンプルなStruts2マルチファイルアップロードとシングルファイルのダウンロードが実装されています。
上記はこの記事に関するものです。すべての人の学習に役立つことを願っています。