여러 파일 필드가 작업에서 배열로 구문 분석될 수 있도록 upload.jsp 페이지에서 동일한 이름으로 여러 파일 필드 개체의 이름을 지정합니다. field는 세 개의 해당 변수로 구문 분석되므로 여러 파일 필드는 세 개의 배열에 해당합니다. 여기서 각 배열의 크기는 파일 필드의 수입니다. JSP 페이지 코드는 다음과 같습니다.
</form>
해당 작업은 모든 파일 필드를 순차적으로 순회한 후 해당 입력 파일 스트림을 생성합니다. 출력 파일 스트림은 해당 출력 파일 스트림을 추가하여 지정된 서버 저장 경로에 파일을 저장합니다. 동시에 서버에 있는 파일의 저장 경로를 동적으로 지정합니다.
액션 코드는 다음과 같습니다.
java.io.파일 가져오기;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
공개 클래스 UploadAction은 ActionSupport를 확장합니다.
개인 문자열 제목;
비공개 파일[] 업로드;
개인 문자열[] uploadFileName;
개인 문자열[] uploadContentType;
개인 문자열 savePath;
공개 문자열 getTitle() {
제목 반환;
}
공개 무효 setTitle(문자열 제목) {
this.제목 = 제목;
}
공개 파일[] getUpload() {
반환 업로드;
}
공공 무효 setUpload(파일[] 업로드) {
this.upload = 업로드;
}
공개 문자열[] getUploadFileName() {
업로드파일이름을 반환합니다.
}
공공 무효 setUploadFileName(String[] uploadFileName) {
this.uploadFileName = 업로드파일이름;
}
공개 문자열[] getUploadContentType() {
uploadContentType을 반환합니다.
}
공공 무효 setUploadContentType(String[] uploadContentType) {
this.uploadContentType = uploadContentType;
}
공개 문자열 getSavePath() {
ServletActionContext.getRequest().getRealPath(savePath)를 반환합니다.
}
공공 무효 setSavePath(문자열 savePath) {
this.savePath = savePath;
}
공개 문자열 업로드()에서 예외 발생{
파일[] 파일=this.getUpload();
for(int i=0;i<files.length;i++){
FileOutputStream fos=new FileOutputStream(this.getSavePath()+"//"+this.getUploadFileName()[i]);
바이트[] 버퍼=새 바이트[1024];
FileInputStream fis=new FileInputStream(파일[i]);
int len=0;
while((len=fis.read(buffer))>0){
fos.write(버퍼,0,len);
}
}
성공을 반환합니다.
}
}
struts.xml 파일은 다음과 같이 구성됩니다. 파일 업로드를 위한 인터셉터 구성, 업로드 허용 파일 유형, 업로드 파일 크기 제한, defaultStack 인터셉터 및 서버에 업로드된 파일의 저장 위치를 도입합니다.
</struts>
Success.jsp 페이지 코드는 다음과 같습니다.