Struts 2-파일 업로드
Struts 2 프레임 워크는 "HTML의 양식 기반 파일 업로드"를 사용하여 파일 업로드를 처리하기위한 기본 제공 지원을 제공합니다. 파일이 업로드되면 일반적으로 임시 디렉토리에 저장되며 데이터가 손실되지 않도록 조치 클래스에 의해 처리되거나 영구 디렉토리로 이동되어야합니다.
Note − 서버에는 임시 디렉토리 및 웹 애플리케이션에 속한 디렉토리 이외의 디렉토리에 쓰기를 금지하는 보안 정책이있을 수 있습니다.
Struts에서 파일 업로드는 미리 정의 된 인터셉터를 통해 가능합니다. FileUpload org.apache.struts2.interceptor.FileUploadInterceptor 클래스를 통해 사용할 수 있으며defaultStack. 여전히 struts.xml에서이를 사용하여 아래에서 볼 수 있듯이 다양한 매개 변수를 설정할 수 있습니다.
보기 파일 만들기
선택한 파일을 찾아서 업로드하는 데 필요한 뷰를 만드는 것부터 시작하겠습니다. 그래서 우리는index.jsp 사용자가 파일을 업로드 할 수 있도록하는 일반 HTML 업로드 양식-
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>File Upload</title>
</head>
<body>
<form action = "upload" method = "post" enctype = "multipart/form-data">
<label for = "myFile">Upload your file</label>
<input type = "file" name = "myFile" />
<input type = "submit" value = "Upload"/>
</form>
</body>
</html>
위의 예에서 주목할만한 몇 가지 사항이 있습니다. 먼저 양식의 enctype이 다음으로 설정됩니다.multipart/form-data. 파일 업로드 인터셉터가 파일 업로드를 성공적으로 처리하도록 설정해야합니다. 다음 요점은 양식의 작업 방법입니다.upload 파일 업로드 필드의 이름입니다. myFile. 액션 메소드와 스트럿 구성을 생성하려면이 정보가 필요합니다.
다음으로 간단한 jsp 파일을 만들어 보겠습니다. success.jsp 성공할 경우 파일 업로드 결과를 표시합니다.
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>File Upload Success</title>
</head>
<body>
You have successfully uploaded <s:property value = "myFileFileName"/>
</body>
</html>
다음은 결과 파일입니다. error.jsp 파일 업로드에 오류가있는 경우-
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>File Upload Error</title>
</head>
<body>
There has been an error in uploading the file.
</body>
</html>
액션 클래스 생성
다음으로 Java 클래스를 생성 해 보겠습니다. uploadFile.java 파일을 업로드하고 안전한 위치에 저장하는 작업을 처리합니다.
package com.tutorialspoint.struts2;
import java.io.File;
import org.apache.commons.io.FileUtils;
import java.io.IOException;
import com.opensymphony.xwork2.ActionSupport;
public class uploadFile extends ActionSupport {
private File myFile;
private String myFileContentType;
private String myFileFileName;
private String destPath;
public String execute() {
/* Copy file to a safe location */
destPath = "C:/apache-tomcat-6.0.33/work/";
try {
System.out.println("Src File name: " + myFile);
System.out.println("Dst File name: " + myFileFileName);
File destFile = new File(destPath, myFileFileName);
FileUtils.copyFile(myFile, destFile);
} catch(IOException e) {
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}
public File getMyFile() {
return myFile;
}
public void setMyFile(File myFile) {
this.myFile = myFile;
}
public String getMyFileContentType() {
return myFileContentType;
}
public void setMyFileContentType(String myFileContentType) {
this.myFileContentType = myFileContentType;
}
public String getMyFileFileName() {
return myFileFileName;
}
public void setMyFileFileName(String myFileFileName) {
this.myFileFileName = myFileFileName;
}
}
그만큼 uploadFile.java매우 간단한 수업입니다. 주목해야 할 중요한 점은 매개 변수 인터셉터와 함께 FileUpload 인터셉터가 우리를 위해 모든 무거운 작업을 수행한다는 것입니다.
FileUpload 인터셉터는 기본적으로 세 개의 매개 변수를 사용할 수 있도록합니다. 그들은 다음 패턴으로 명명됩니다-
[your file name parameter] − 사용자가 업로드 한 실제 파일입니다. 이 예에서는 "myFile"이됩니다.
[your file name parameter]ContentType− 업로드 된 파일의 내용 유형입니다. 이 예에서는 "myFileContentType"이됩니다.
[your file name parameter]FileName− 업로드 된 파일의 이름입니다. 이 예에서는 "myFileFileName"이됩니다.
Struts 인터셉터 덕분에 세 가지 매개 변수를 사용할 수 있습니다. 우리가해야 할 일은 Action 클래스에 올바른 이름으로 세 개의 매개 변수를 만드는 것뿐입니다.이 변수는 자동으로 연결됩니다. 따라서 위의 예에서 세 개의 매개 변수와 모든 것이 제대로 진행되면 "성공"을 반환하는 액션 메소드가 있습니다. 그렇지 않으면 "오류"를 반환합니다.
구성 파일
다음은 파일 업로드 프로세스를 제어하는 Struts2 구성 속성입니다.
Sr. 아니요 | 속성 및 설명 |
---|---|
1 | struts.multipart.maxSize 파일 업로드로 허용 할 파일의 최대 크기 (바이트)입니다. 기본값은 250M입니다. |
2 | struts.multipart.parser 멀티 파트 양식을 업로드하는 데 사용되는 라이브러리입니다. 기본적으로jakarta |
삼 | struts.multipart.saveDir 임시 파일을 저장할 위치입니다. 기본적으로 javax.servlet.context.tempdir입니다. |
이러한 설정을 변경하려면 다음을 사용할 수 있습니다. constant 업로드 할 파일의 최대 크기를 변경하기 위해했던 것처럼 애플리케이션 struts.xml 파일에 태그를 지정하십시오.
우리가 struts.xml 다음과 같이-
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<constant name = "struts.multipart.maxSize" value = "1000000" />
<package name = "helloworld" extends = "struts-default">
<action name = "upload" class = "com.tutorialspoint.struts2.uploadFile">
<result name = "success">/success.jsp</result>
<result name = "error">/error.jsp</result>
</action>
</package>
</struts>
이후, FileUpload인터셉터는 기본 인터셉터 스택의 일부이므로 명시 적으로 구성 할 필요가 없습니다. 그러나 <action> 안에 <interceptor-ref> 태그를 추가 할 수 있습니다. fileUpload 인터셉터는 두 개의 매개 변수를 사용합니다.(a) maximumSize 과 (b) allowedTypes.
maximumSize 매개 변수는 허용되는 최대 파일 크기를 설정합니다 (기본값은 약 2MB). allowedTypes 매개 변수는 아래와 같이 허용 된 콘텐츠 (MIME) 유형의 쉼표로 구분 된 목록입니다.
<action name = "upload" class = "com.tutorialspoint.struts2.uploadFile">
<interceptor-ref name = "basicStack">
<interceptor-ref name = "fileUpload">
<param name = "allowedTypes">image/jpeg,image/gif</param>
</interceptor-ref>
<result name = "success">/success.jsp</result>
<result name = "error">/error.jsp</result>
</action>
다음 내용은 web.xml 파일-
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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-pattern>
</filter-mapping>
</web-app>
이제 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 Export > WAR FileWar 파일을 만듭니다. 그런 다음 Tomcat의 webapps 디렉토리에이 WAR을 배포합니다. 마지막으로 Tomcat 서버를 시작하고 URL에 액세스하십시오.http://localhost:8080/HelloWorldStruts2/upload.jsp. 다음 화면이 생성됩니다.
이제 Browse 버튼을 사용하여 "Contacts.txt"파일을 선택하고 업로드 버튼을 클릭하면 서브에 파일이 업로드되고 다음 페이지가 표시됩니다. 업로드 된 파일이 C : \ apache-tomcat-6.0.33 \ work에 저장되어 있는지 확인할 수 있습니다.
FileUpload 인터셉터는 업로드 된 파일을 자동으로 삭제하므로 삭제하기 전에 업로드 된 파일을 특정 위치에 프로그래밍 방식으로 저장해야합니다.
오류 메시지
fileUplaod 인터셉터는 몇 가지 기본 오류 메시지 키를 사용합니다.
Sr. 아니요 | 오류 메시지 키 및 설명 |
---|---|
1 | struts.messages.error.uploading 파일을 업로드 할 수 없을 때 발생하는 일반 오류입니다. |
2 | struts.messages.error.file.too.large 업로드 된 파일이 maximumSize에 지정된 것보다 너무 큰 경우 발생합니다. |
삼 | struts.messages.error.content.type.not.allowed 업로드 된 파일이 지정된 예상 콘텐츠 형식과 일치하지 않을 때 발생합니다. |
다음에서 이러한 메시지의 텍스트를 재정의 할 수 있습니다. WebContent/WEB-INF/classes/messages.properties 리소스 파일.