1つ目は、webページパーツupload_file.jspです
<%@ページ言語= "java" image = "java.util。*" pageencoding = "utf-8"%> <! > <form action = "uploadfile" method = "post" enctype = "multipart /form-data"> <! - file domain-> <input type = "file" name "name =" source " /< /> input type =" 「value = "upload"> </form> </body> </html>を送信します
ファイルをアップロードする形式の場合、Methoを投稿するように設定する必要があり、EnctypeはMultiPart/Form-Dataに設定する必要があります。
上記のコードから、このフォームがこのアクションを処理するためにアップロードファイルに送信されることがわかります。
<アクションname = "uploadfile"> <result name = "success">/uploadResult.jsp </result> <! - fileuploading。アップロードドキュメントのタイプとドキュメントサイズを制限するために使用できます。 = "fileupload"> <! - ファイルのサイズを制限20m、ユニットはbyte-> <sem name = "maximumsize"> 20971520 </param> </interceptor-ref> <! - デフォルトのインターセプターを宣言する必要があります。
Fileuploadインターセプターを使用して、ファイルの種類とサイズを制限するようにアップロードパスをセットアップします。
ファイルのサイズに関しては、<param name = "Maximumsize"を持っていることは不可能です>> <Struts>タグの下に追加する必要があります
<constant name = "struts.multipart.maxsize" value = "21000000"/>/>
このコード行は、プロジェクト全体にファイルをアップロードできるファイルサイズの最大サイズを示しています。つまり、このプロジェクトでアップロードされたファイルサイズは21000000バイト(約20m)を超えることはできませんデフォルトでアップロードできるファイルは2mであるため、これは2mファイルのみをアップロードできる2mファイルの制限を破る方法でもあります。
ファイルのタイプに関しては、画像ファイルとして制限する必要がある場合は、このように構成できます
<! - 画像ファイルのアップロードのみをセットアップ - > <intercepter-ref name = "fileupload"> <posm name = "applaidTypes"> bmp、image/x-png、image/gif、image/jpeg < /< /param> < /intercepter-ref> <interceptor-ref name = "defaultStack" /> />
ラベルの値は、ファイルの値がmimeタイプであり、共通ファイルのmimeタイプは%tomcat_home%/conf/web.xmlにあることです。
Wordファイルに制限されたい場合は、このように構成されている<terecedor>
<! - settlingはWord Document-> <intercepter-ref name = "fileupload"> <sem name = "applaintypes"> application/msword、application/vnd.openxmlformats-offic edocument.wordprocessingml.document </param> </param> < /intercepter-ref> <interceptor-ref name = "defaultStack" />
ただし、ファイルタイプを制限するためにこのように感じます。JavaScriptを使用してフロントエンドで制限を実装する方が良いです。
次に、アップロードの書き込み、アップロードに必要なプライベート属性はソースです。これは、upload_file.js Pのファイルドメインの名前属性と一致しています。つまり、ファイルドメインの名前プロパティ値はソースです。さらに、さらに2つの重要なプライベート属性があります。
プライベート文字列sourceFileName; //アップロードするファイルのファイル名
プライベート文字列SourcontentType;
要約すると、たとえば、upload_file.jspの中国フィールドドメインの名前= "abc"は、これをアクションで定義する必要があります
プライベートファイルABC;
ABCは、アップロードするファイルオブジェクトを自動的に取得し、ABCFILENAMEはファイル名を自動的に取得し、ABCCONTETTYPEはファイルタイプを自動的に取得します。
パスのアップロードに集中する必要があります。
絶対パスにアップロードされた場合、それはかなり良いですが、プロジェクトルートディレクトリのアップロードフォルダーにアップロードする場合は、このアップロードフォルダーの完全なパスを取得するにはどうすればよいですか?
私は使用しようとしました
ServletactionContext.getServletContext()。
しかし、nullを返しました。使用も使用しています
servletactioncontext.getRequest()。
まだヌルに戻っています。しかし、この問題をオンラインで確認すると、多くの人がこの執筆を推奨し、場合によっては実行可能であることを証明していますが、私のように新しい方法を推奨する人がいます。 ServiceContextareインターフェイス。特定の方法は次のとおりです。
Public Class Uploadactionは、ActionSupport ImvletContextare { / ** * / Prive ServletContext Context(){return context;} public void context(servicecontext){this.context = context; void setServletContext(servletcontext context){this.context = context;}}}
次に、使用します
String Path = Context.getRealPath( "/upload");
アップロードフォルダーのパスを取得します。次に、アップロードを実行します。
/*ファイルをアップロードフォルダーにアップロードします*/file saveful = new file(path、sourceFileName);
この方法は、プロジェクトが詰め込まれて他の環境に転送されたときに正しいパスを回避するように思われるため、この方法を個人的にお勧めします。
back uploadaction.javaにアップロードの完全なコードを貼り付けます
com.lidi.io.io.ioexception Classの拡張IMVLETCONTEXTARE { / ** * / private inl serviceversionuid = 1LファイルのタイプPrivate ServletContextコンテキスト。 / public file getSource(){return source;} public void setSource(file source){this.source = source; string getsourceContentType(){return sourcontenttype;} public voidth e(string sourcontenttype){this.sourcecontenttype = sourcecontenttype;} *アップロードファイル:Project Root Directory Path.GetRealPath( "/upload");フォルダー* savefile(sourcefilename);
upload results page uploadresult.jsp
<%@ページ言語= "java" image = "java.util。*" pageencoding = "utf-8"%> <%@ taglib uri = "/struts-tags freix =" s "%> <! Doctype html> <html> <head> <title> upload result </title> </head> <body> <p>ファイル名:<s:プロパティ値= "sourcefilename"/> </p> <p>ファイルタイプ:<s:プロパティ値= "sourcecontenttype" /> < /p> <p>ファイル:<a href = "upload /<s:property value =" sourcefilename " /"> <s:property = "sourcefi lename" /> </a> </p> </body> </html>
上記は、この記事のすべての内容です。