단일 파일 업로드를 2가지 방법으로 시뮬레이션합니다. 효과는 다음과 같습니다.
개발 단계는 다음과 같습니다.
1. 아래와 같이 새 웹 프로젝트를 생성하고 struts2 업로드 파일에 필요한 jar를 가져옵니다.
디렉토리 구조
2. 새로운 액션 생성
첫 번째 방법
다음과 같이 코드 코드를 복사합니다.
패키지 com.ljq.action;
java.io.파일 가져오기;
org.apache.commons.io.FileUtils 가져오기;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("연속")
공개 클래스 UploadAction은 ActionSupport를 확장합니다.
비공개 파일 이미지; //업로드된 파일
private String imageFileName; //파일 이름
개인 문자열 imageContentType;
공개 문자열 실행()이 예외를 발생시킵니다. {
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
//D:/apache-tomcat-6.0.18/webapps/struts2_upload/images
System.out.println("실제 경로: "+실제 경로);
if (이미지 != null) {
파일 저장파일 = new File(new File(realpath), imageFileName);
if (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
FileUtils.copyFile(이미지, 저장파일);
ActionContext.getContext().put("message", "파일이 성공적으로 업로드되었습니다.");
}
"성공"을 반환합니다.
}
공개 파일 getImage() {
이미지 반환;
}
공공 무효 setImage(파일 이미지) {
this.image = 이미지;
}
공개 문자열 getImageFileName() {
이미지파일명 반환;
}
공공 무효 setImageFileName(문자열 imageFileName) {
this.imageFileName = 이미지파일이름;
}
공개 문자열 getImageContentType() {
imageContentType을 반환합니다.
}
공공 무효 setImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
}
두 번째 방법
다음과 같이 코드 코드를 복사합니다.
패키지 com.ljq.action;
java.io.파일 가져오기;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("연속")
공개 클래스 UploadAction2는 ActionSupport를 확장합니다.
//업로드된 파일 도메인의 속성을 캡슐화합니다.
개인 파일 이미지;
//업로드된 파일 형식의 속성을 캡슐화합니다.
개인 문자열 imageContentType;
//업로드된 파일 이름의 속성을 캡슐화합니다.
개인 문자열 imageFileName;
//의존성 주입 속성을 수락합니다.
개인 문자열 savePath;
@보수
공개 문자열 실행() {
FileOutputStream fos = null;
FileInputStream fis = null;
노력하다 {
//파일 출력 스트림 생성
System.out.println(getSavePath());
fos = new FileOutputStream(getSavePath() + "//" + getImageFileName());
//파일 업로드 스트림 생성
fis = new FileInputStream(getImage());
바이트[] 버퍼 = 새 바이트[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(버퍼, 0, len);
}
} 잡기(예외 e) {
System.out.println("파일 업로드 실패");
e.printStackTrace();
} 마지막으로 {
닫기(fos, fis);
}
성공을 반환합니다.
}
/**
* 업로드한 파일의 저장 위치로 돌아갑니다.
*
* @반품
*/
공개 문자열 getSavePath()에서 예외 발생{
ServletActionContext.getServletContext().getRealPath(savePath)를 반환합니다.
}
공공 무효 setSavePath(문자열 savePath) {
this.savePath = savePath;
}
공개 파일 getImage() {
이미지 반환;
}
공공 무효 setImage(파일 이미지) {
this.image = 이미지;
}
공개 문자열 getImageContentType() {
imageContentType을 반환합니다.
}
공공 무효 setImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
공개 문자열 getImageFileName() {
이미지파일명 반환;
}
공공 무효 setImageFileName(문자열 imageFileName) {
this.imageFileName = 이미지파일이름;
}
개인 무효 닫기(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 version="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에서 처리됩니다.
사용자가 여러 요청 접미사를 지정해야 하는 경우 여러 접미사를 쉼표(,)로 구분합니다. -->
<상수 이름="struts.action.extension" value="do" />
<!-- 브라우저가 정적 콘텐츠를 캐시하는지 여부를 설정합니다. 기본값은 true입니다(프로덕션 환경에서 사용됨). 개발 단계에서는 끄는 것이 가장 좋습니다. -->
<상수 이름="struts.serve.static.browserCache" 값="false" />
<!-- Struts 구성 파일이 수정되면 시스템이 자동으로 파일을 다시 로드할지 여부, 기본값은 false(프로덕션 환경에서 사용됨)이므로 개발 단계에서 켜는 것이 가장 좋습니다 -->
<상수 이름="struts.configuration.xml.reload" value="true" />
<!-- 개발 모드에서 사용되므로 더 자세한 오류 메시지를 인쇄할 수 있습니다 -->
<상수 이름="struts.devMode" 값="true" />
<!--기본 보기 테마-->
<상수 이름="struts.ui.theme" value="simple" />
<!--<constant name="struts.objectFactory" value="spring" />-->
<!--잘못된 코드에 대한 솔루션-->
<상수 이름="struts.i18n.encoding" value="UTF-8" />
<!-- 업로드된 파일에 허용되는 최대 바이트 수를 지정합니다. 기본값은 2097152(2M) -->
<상수 이름="struts.multipart.maxSize" value="10701096"/>
<!-- 업로드된 파일을 위한 임시 폴더를 설정합니다. 기본적으로 javax.servlet.context.tempdir이 사용됩니다. -->
<constant name="struts.multipart.saveDir " value="d:/tmp" />
<패키지 이름="업로드" 네임스페이스="/업로드" 확장="struts-default">
<작업 이름="*_upload" 메서드="{1}">
<result name="success">/WEB-INF/page/message.jsp</result>
</액션>
</패키지>
<패키지 이름="upload2" 확장="struts-default">
<작업 이름="upload2" 방법="실행">
<!-- savePath의 속성 값을 동적으로 설정 -->
<param name="savePath">/이미지</param>
<result name="success">/WEB-INF/page/message.jsp</result>
<result name="input">/upload/upload.jsp</result>
<interceptor-ref name="fileUpload">
<!-- 파일 필터링 -->
<param name="allowedTypes">이미지/bmp,이미지/png,이미지/gif,이미지/jpeg</param>
<!-- 파일 크기(바이트) -->
<param name="maximumSize">1025956</param>
</인터셉터-ref>
<!-- 기본 인터셉터는 fileUpload 뒤에 배치되어야 합니다. 그렇지 않으면 유효하지 않습니다 -->
<interceptor-ref name="defaultStack" />
</액션>
</패키지>
</struts>
양식 페이지 업로드
다음과 같이 코드 코드를 복사합니다.
<%@ 페이지 언어="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="cache-control" content="no-cache">
<meta http-equiv="만료" 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" 메서드="포스트">
파일:<입력 유형="파일" 이름="이미지">
<input type="submit" value="업로드" />
</form>
<br/>
<s:필드오류 />
</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="cache-control" content="no-cache">
<meta http-equiv="만료" 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>