2 つの方法で単一ファイルのアップロードをシミュレートします。効果は次のとおりです。
開発手順は次のとおりです。
1. 以下に示すように、新しい Web プロジェクトを作成し、struts2 アップロード ファイルに必要な jar をインポートします。
ディレクトリ構造
2. 新しいアクションを作成する
最初の方法
次のようにコードをコピーします。
パッケージcom.ljq.action;
java.io.ファイルをインポートします。
org.apache.commons.io.FileUtils をインポートします。
org.apache.struts2.ServletActionContext をインポートします。
com.opensymphony.xwork2.ActionContext をインポートします。
com.opensymphony.xwork2.ActionSupport をインポートします。
@SuppressWarnings("シリアル")
public class UploadAction extends ActionSupport{
プライベートファイルイメージ; //アップロードされたファイル
private String imageFileName //ファイル名;
private String imageContentType //ファイルタイプ;
public Stringexecute() が例外をスローする {
文字列 realpath = ServletActionContext.getServletContext().getRealPath("/images");
//D:/apache-tomcat-6.0.18/webapps/struts2_upload/images
System.out.println("realpath: "+realpath);
if (画像 != null) {
File savefile = new File(new File(realpath), imageFileName);
if (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
FileUtils.copyFile(画像, ファイルを保存);
ActionContext.getContext().put("メッセージ", "ファイルは正常にアップロードされました");
}
「成功」を返します。
}
public File getImage() {
画像を返す;
}
public void setImage(ファイル画像) {
this.image = 画像;
}
public String getImageFileName() {
画像ファイル名を返します。
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
public String getImageContentType() {
imageContentType を返します。
}
public void setImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
}
第二の方法
次のようにコードをコピーします。
パッケージcom.ljq.action;
java.io.ファイルをインポートします。
java.io.FileInputStreamをインポートします。
java.io.FileOutputStreamをインポートします。
インポート java.io.IOException;
org.apache.struts2.ServletActionContext をインポートします。
com.opensymphony.xwork2.ActionSupport をインポートします。
@SuppressWarnings("シリアル")
public class UploadAction2 extends ActionSupport {
//アップロードされたファイルドメインの属性をカプセル化します
プライベートファイルイメージ。
//アップロードされたファイルタイプの属性をカプセル化します
プライベート文字列 imageContentType;
//アップロードされたファイル名の属性をカプセル化します
プライベート文字列画像ファイル名;
//依存性注入プロパティを受け入れる
プライベート文字列の保存パス。
@オーバーライド
public Stringexecute() {
FileOutputStream fos = null;
FileInputStream fis = null;
試す {
// ファイル出力ストリームを作成する
System.out.println(getSavePath());
fos = new FileOutputStream(getSavePath() + "//" + getImageFileName());
// ファイルアップロードストリームを作成する
fis = 新しい FileInputStream(getImage());
byte[] バッファ = 新しいバイト [1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(バッファ, 0, len);
}
} catch (例外 e) {
System.out.println("ファイルのアップロードに失敗しました");
e.printStackTrace();
} ついに {
閉じる(fos, fis);
}
成功を返します。
}
/**
※アップロードしたファイルの保存場所に戻ります
*
* @戻る
*/
public String getSavePath() は例外をスローします{
return ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = 保存パス;
}
public File getImage() {
画像を返す;
}
public void setImage(ファイル画像) {
this.image = 画像;
}
public String getImageContentType() {
imageContentType を返します。
}
public void setImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
public String getImageFileName() {
画像ファイル名を返します。
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
private void close(FileOutputStream fos, FileInputStream fis) {
if (fis != null) {
試す {
fis.close();
} キャッチ (IOException e) {
System.out.println("FileInputStream を閉じることができませんでした");
e.printStackTrace();
}
}
if (fos != null) {
試す {
fos.close();
} キャッチ (IOException e) {
System.out.println("FileOutputStream を閉じることができませんでした");
e.printStackTrace();
}
}
}
}
struts.xml 構成ファイル
次のようにコードをコピーします。
<?xml バージョン="1.0" エンコーディング="UTF-8" ?>
<!DOCTYPE ストラット PUBLIC
"-//Apache Software Foundation//DTD Struts 構成 2.0//EN"
「http://struts.apache.org/dtds/struts-2.0.dtd」
<支柱>
<!-- この属性は、Struts2 によって処理される必要がある要求サフィックスを指定します。この属性のデフォルト値は action です。つまり、*.action に一致するすべての要求が Struts2 によって処理されます。
ユーザーが複数のリクエストサフィックスを指定する必要がある場合は、複数のサフィックスをカンマ (,) で区切ります。 -->
<constant name="struts.action.extension" value="do" />
<!-- ブラウザが静的コンテンツをキャッシュするかどうかを設定します。デフォルト値は true (運用環境で使用) であり、開発段階ではオフにすることをお勧めします。 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- Struts 構成ファイルが変更された場合、システムがファイルを自動的に再ロードするかどうか、デフォルト値は false (運用環境で使用)、開発段階で有効にすることをお勧めします -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 開発モードで使用すると、より詳細なエラー メッセージを出力できます -->
<constant name="struts.devMode" value="true" />
<!--デフォルトのビューテーマ-->
<constant name="struts.ui.theme" value="simple" />
<!--<constant name="struts.objectFactory" value="spring" />-->
<!--文字化けしたコードの解決策-->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- アップロードされるファイルに許可される最大バイト数を指定します。デフォルト値は 2097152(2M) -->
<constant name="struts.multipart.maxSize" value="10701096"/>
<!-- アップロードされたファイルの一時フォルダーを設定します。デフォルトでは javax.servlet.context.tempdir が使用されます -->
<constant name="struts.multipart.saveDir " value="d:/tmp" />
<package name="upload" namespace="/upload" extends="struts-default">
<アクション名="*_upload" メソッド="{1}">
<result name="success">/WEB-INF/page/message.jsp</result>
</アクション>
</パッケージ>
<パッケージ名="upload2" extends="struts-default">
<アクション名="アップロード2" メソッド="実行">
<!-- savePath の属性値を動的に設定します -->
<param name="savePath">/images</param>
<result name="success">/WEB-INF/page/message.jsp</result>
<result name="input">/upload/upload.jsp</result>
<interceptor-ref name="fileUpload">
<!-- ファイルのフィルタリング -->
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<!-- ファイル サイズ (バイト単位) -->
<param name="maximumSize">1025956</param>
</interceptor-ref>
<!-- デフォルトのインターセプタは fileUpload の後に配置する必要があります。そうでない場合は無効になります -->
<interceptor-ref name="defaultStack" />
</アクション>
</パッケージ>
</ストラット>
アップロードフォームページ
次のようにコードをコピーします。
<%@ ページ言語="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<頭>
<title>ファイルのアップロード</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="キャッシュコントロール" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<本文>
<!-- ${pageContext.request.contextPath}/upload/execute_upload.do -->
<!-- ${pageContext.request.contextPath}/upload2/upload2.do -->
<form action="${pageContext.request.contextPath}/upload2/upload2.do"
enctype="multipart/form-data" method="post">
ファイル:<input type="file" name="image">
<input type="submit" value="アップロード" />
</form>
<br/>
<s:fielderror />
</body>
</html>
結果ページを表示
次のようにコードをコピーします。
<%@ ページ言語="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<頭>
<title>アップロードに成功しました</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="キャッシュコントロール" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<本文>
アップロードが成功しました!
<br/><br/>
<!-- ${pageContext.request.contextPath} Tomcat デプロイメント パス、
例: D:/apache-tomcat-6.0.18/webapps/struts2_upload/ -->
<img src="${pageContext.request.contextPath}/<s:property value="'images/'+imageFileName"/>">
<s:デバッグ></s:デバッグ>
</body>
</html>