B/S 시스템에서 작업 할 때는 일반적으로 파일 업로드 및 파일 다운로드가 포함됩니다. Struts2 프레임 워크에 연결하기 전에 Apache 아래의 Commons 서브 프로스트의 FileUpload 구성 요소를 사용하여 파일을 업로드합니다. 그러나 그렇게하면 코드는 번거롭고 융통성이 없습니다. Struts2를 학습 한 후 Struts2는 파일 업로드 및 다운로드를위한 더 나은 구현 메커니즘을 제공합니다. 여기서는 단일 파일 업로드 및 멀티 파일 업로드의 소스 코드를 설명합니다. 여기서는 파일 다운로드로 업로드 된 두 개의 JAR 파일을 가져와야하며, 하나는 Commons-FileUpload-1.2.2.jar이고, 다른 하나는 Commons-IO-2.0.1.jar입니다.
struts2 단일 파일 업로드 :
우선 JSP 파일 업로드 페이지가 있습니다. 이것은 비교적 간단하며 파일 업로드 상자가있는 양식입니다.
<!-파일을 업로드 할 때 파일을 업로드 할 때 이진 파일이 매우 클 수 있으므로 파일을 업로드 할 때 양식 제출 방법이 게시되어야합니다. ENCTYPE 속성도 있습니다. 이 속성은 이진 텍스트에서 멀티 파트/양식-데이터로 작성해야하며, 그렇지 않으면 이진 텍스트로 서버에 업로드해야합니다.> <form action = "fileUpload.action"method = "post"enctype = "multipart/form-data"> username : <입력 유형 = "text"name = "username"> <br> 파일 : <input type = "dopply" "<input type ="제출 ""<input type = "input" </form>
다음은 코드의 FileUploadAction 부분입니다. Struts2는 업로드 및 다운로드를위한 좋은 인턴쉽 메커니즘을 제공하기 때문에 코드를 거의 작성하면됩니다.
public class fileUploadAction actionSupport {private String username; // 파일은 프론트 엔드 JSP에서 업로드 한 파일 자체를 참조하지 않고 임시 폴더 프라이빗 파일 아래에 저장하도록 업로드 된 파일; // 제출 된 파일 이름의 이름은 private String filefilename; // 파일 제출 된 파일의 마임 유형 filecontentType; public String getUserName () {return username; } public void setusername (String username) {this.username = username; } public file getFile () {return file; } public void setfile (파일 파일) {this.file = 파일; } public String getFileFileName () {return fileFilename; } public void setFileFileName (String fileFilename) {this.FileFilename = FileFilename; } public String getFileContentType () {return fileContentType; } public void setFileContentType (String FileContentType) {this.FileContentType = FilEcontentType; } @override public string execute ()는 예외를 {string root = servletactionContext.getServletContext (). getRealPath ( "/upload"); inputStream은 = 새 fileInputStream (파일); outputStream os = 새 FileOutputStream (새 파일 (root, filefilename)); System.out.println ( "filefilename :" + filefilename); // 파일은 임시 폴더에 저장된 파일이므로 파일 이름과 파일 경로를 인쇄하여 이전 파일 필레나 이름 System.out.println ( "파일 :" + file.getName ())과 동일한 지 확인할 수 있습니다. System.out.println ( "파일 :" + file.getPath ()); 바이트 [] 버퍼 = 새로운 바이트 [500]; int 길이 = 0; while (-1! = (길이 = is.read (버퍼, 0, buffer.length))) {os.write (buffer); } os.close (); is.close (); 반환 성공; }}우선, 여기의 파일은 실제로 JSP가 업로드 한 파일을 참조하지 않음을 분명히해야합니다. 파일이 업로드되면 struts2는 먼저 struts.multipart.savedir (default.properties)에 의해 지정된 스토리지 위치를 찾습니다. 임시 파일 스토리지 위치를 지정하기 위해 새 struts.properties 속성 파일을 만들 수 있습니다. 지정되지 않은 경우 파일은 Tomcat의 Apache-Tomcat-7.0.29/Work/Catalina/LocalHost/Directory에 저장됩니다. 그런 다음 파일을 업로드 한 후 스토리지 위치를 지정하고 출력 스트림을 통해 스트림에 기록 할 수 있습니다. 현재 폴더에 업로드 한 파일을 볼 수 있습니다.
파일을 업로드 한 후에도 여전히 다운로드해야합니다. 실제로 Struts2를 다운로드하는 원리는 매우 간단합니다. 입력 스트림을 정의한 다음 파일을 입력 스트림에 쓰는 것입니다. 주요 구성은 여전히 struts.xml 구성 파일에서 구성하는 것입니다.
제출 된 부하 작용 코드는 다음과 같습니다.
공개 클래스 FiledOwnLoadaction은 ActionSupport를 확장합니다 {public inputStream getDownloadFile () {return servletActionContext.getServletContext (). getResourCeasStream ( "업로드/주소 2012.xls"); } @override public string execute ()는 예외 {return success; }}이 동작이 입력 스트림을 정의한 다음 getter 메소드를 제공하는 것을 보자. 다음으로 struts.xml의 구성 파일을 살펴 보겠습니다.
<action name = "filedownload"> <result name = "success"type = "stream"> <param name = "contentDisposition"> 첨부; filename = "주소록 2012 년 9 월 4 일. xls"</param> <param name = "inputname"> downloadfile </param> </result> </action>
struts.xml 구성 파일에주의를 기울여야 할 몇 가지 사항이 있습니다. 우선, 결과 유형입니다. 과거에는 행동을 정의했습니다. 우리는 기본적으로 결과에서 유형 속성을 작성하지 않았습니다. 전달 (Dispatcher)을 요청하는 기본값이 있기 때문입니다. 이 속성 외에도 일반적으로 리디렉션 (리디렉션)과 같은 값이 있습니다. 여기서 파일 다운로드를 사용하고 있으므로 유형은 스트림 유형으로 정의되어 동작을 알려야합니다. 이것이 파일 다운로드의 결과입니다. 결과 요소에는 일반적으로 매개 변수 하위 요소가 있습니다. 파일을 다운로드 할 때 매개 변수를 설정하는 데 사용됩니다. e이 속성은 파일 입력 스트림을 작동시키는 것입니다. 이름은 작동중인 입력 스트림 속성과 동일해야합니다. 그런 다음 contentDisPosition 속성은 contentDisPosition 속성입니다. 이 속성은 일반적으로 다운로드 된 파일을 처리하는 방법을 지정하는 데 사용됩니다. 값이 첨부 파일 인 경우 다운로드 상자가 팝업되어 사용자가 다운로드 여부를 선택할 수 있습니다. 이 값이 설정되지 않으면 브라우저는 먼저 다운로드 된 파일을 열는지 확인합니다. 가능하다면 다운로드 된 파일을 직접 열립니다 (물론 이것은 우리가 필요로하는 것이 아닙니다). 다른 값은 filename입니다.이 파일 다운로드 이름은 다운로드 할 때 파일로 표시됩니다. 이 정보를 구성한 후 파일 다운로드 기능을 구현할 수 있습니다.
struts2 다중 파일 업로드 :
실제로 멀티 파일 업로드의 원리는 단일 파일 업로드와 동일합니다. 단일 파일 업로드는 단일 파일이며 목록 <file> 수집 또는 파일 [] 배열이 업로드됩니다. 먼저 프론트 엔드 JSP 부분의 코드를 살펴 보겠습니다. 여기서는 jQuery를 사용하여 동적 파일 추가 및 동적 삭제 다운로드 상자를 구현했습니다.
<script type = "text/javaScript"src = "script/jquery-1.8.1.js"> </script> <script type = "text/javaScript"> $ (function () {$ ( "#button"). click () {var html = $ ( "<input type = 'filet'>"); 이름 = 'button'value = 'delete'> <br> "); $ ("#body div "). Append (html) .append (button); button.click (function () {html.remove (); remove ();})})})})})})})}))}))})}))}))})"pileupload 2. ENCTYPE = "multipart/form-data"> username : <input type = "text"name = "username"> <br> 파일 : <input type = "file"name "="file "> <input type ="button "value ="id = "ind ="input type = "value"> </body> </body> 파일 이름은 파일의 이름을 지정해야하며 여러 파일 업로드를위한 조치 코드는 다음과 같습니다.
public class fileUploadAction2 actionSupport {private String username; // 여기에서 목록을 사용하여 업로드 된 파일을 저장합니다. 파일은 실제로 업로드 된 파일 개인 목록 <file> 파일이 아닌 임시 폴더의 임시 파일을 말합니다. //이 목록은 List <file> 개인 목록 <string> filefilename의 파일에 해당하는 파일 이름을 저장합니다. 개인 목록 <String> FileContentType; public String getUserName () {return username; } public void setusername (String username) {this.username = username; } public list <file> getFile () {return file; } public void setfile (list <file> 파일) {this.file = file; } public list <string> getFileFileName () {return fileFilename; } public void setFileFileName (list <string> filefilename) {this.fileFilename = FileFilename; } public list <string> getFileContentType () {return fileContentType; } public void setFileContentType (list <string> fileContentType) {this.FileContentType = filecontentType; } @override public string execute ()는 예외를 {string root = servletactionContext.getServletContext (). getRealPath ( "/upload"); for (int i = 0; i <file.size (); i ++) {inputStream은 = new FileInputStream (file.get (i)); outputStream os = 새 FileOutputStream (새 파일 (root, filefilename.get (i))); 바이트 [] 버퍼 = 새로운 바이트 [500]; @SuppressWarnings ( "사용되지 않은") int 길이 = 0; while (-1! = (길이 = is.read (버퍼, 0, buffer.length))) {os.write (buffer); } os.close (); is.close (); } 반환 성공; }}이것은 또한 출력 스트림에 기록되어 폴더에서 여러 개의 업로드 된 파일을 볼 수 있습니다.
다음 파일 다운로드는 지금 당장 파일 다운로드와 정확히 동일하며 struts.xml이므로 여기에서 반복하지 않습니다.
요약 : 일반적으로 Struts2에서 제공하는 파일 업로드 및 다운로드 메커니즘은 많은 코드를 단순화합니다. 향후 프로젝트 에서이 메커니즘을 사용할 수 있습니다. FileUpload 구성 요소를 사용하여 파일을 업로드 할 수도 있습니다. 이것은 모두 개인 취향에 의해 결정됩니다!
Javaweb에는 파일 업로드 및 다운로드 기능에 대한 콘텐츠가 너무 많습니다. 읽어 주셔서 감사합니다.