java의 Struts2 파일 업로드 및 다운로드 예

파일 업로드
  • 양식 준비
  • HTML 양식을 사용하여 하나 이상의 파일을 업로드하려면
  • HTML 양식의 enctype 속성을 multipart/form-data
  • 로 설정해야 합니다.
  • HTML 폼의 method 속성을post
  • 로 설정해야 합니다
  • 필드를 추가해야 합니다.
  • 파일 업로드에 대한 Struts 지원
  • Struts 응용 프로그램에서 File Upload 차단기와 Jakarta Commons File Upload 구성 요소로 파일을 업로드할 수 있습니다.
  • 단계:
  • Jsp 페이지의 파일 업로드 폼에 파일 탭을 사용합니다.한 번에 여러 개의 파일을 업로드하려면 여러 개의 파일 라벨을 사용해야 하지만 이름이 같아야 합니다
  • Action에 파일 업로드와 관련된 속성 3개를 새로 추가합니다.이 세 속성의 이름은 반드시 아래 형식이어야 한다
  • 기본 파일 업로드: Action에서 다음과 같은 3개 속성을 직접 정의하고 대응하는 getter와setter
  • 를 제공합니다.
  • [File Name]: 유형 - File - 업로드된 파일입니다.예를 들어 데이터 (fileName 요구 사항과 파일 폼 항목의name 일치)
  • [File Name] ContentType: 유형 - String - 파일을 업로드하는 파일 유형입니다.예: dataContentType(파일 형식 수신(MIME 값)
  • [File Name] FileName: String - 파일을 업로드하는 파일 이름입니다.예: dataFileName(파일을 받는 이름)
  • 여러 파일을 업로드하는 경우 List
  • 여러 파일을 전달하면 상기 3개 속성은 List 형식으로 변경할 수 있습니다!여러 파일 영역의name 속성 값은 일치해야 합니다.
  • 예제 코드
  • 
    <s:form action="testUpload" enctype="multipart/form-data">
      <s:textfield name="userName[0]" label=" -1"></s:textfield>
      <s:file name="photos" label=" "></s:file>
      <s:textfield name="userName[1]" label=" -2"></s:textfield>
      <s:file name="photos" label=" "></s:file>
      <s:textfield name="userName[2]" label=" -3"></s:textfield>
      <s:file name="photos" label=" "></s:file>
      <s:submit value=" "></s:submit>
    </s:form> 
    
    public class UploadAction extends ActionSupport{
    
      @Setter@Getter
      private List<File> photos;
      @Setter@Getter
      private List<String> photosContentType;
      @Setter@Getter
      private List<String> photosFileName;
      @Setter@Getter
      private List<String> userName;
    
      public String testUpload() throws IOException {
        System.out.println("userName: "+userName);
        System.out.println("photos: "+photos);
        System.out.println("photosFileName: "+ photosFileName);
        System.out.println("photosContentType: "+photosContentType);
    
        //  upload 
        //  ServletContext
        ServletContext servletContext = ServletActionContext.getServletContext();
        // 
        String realPath = servletContext.getRealPath("/upload");
        System.out.println(realPath);
        File uploadFile = new File(realPath);
        // 
        if (!uploadFile.exists()){
          // 
          uploadFile.mkdir();
        }
        for (int i = 0; i < photos.size(); i++) {
          UUID uuid = UUID.randomUUID();
          FileUtils.copyFile(photos.get(i), new File(realPath + "/" + uuid + photosFileName.get(i)));
        }
        return SUCCESS;
      }
    }
    
    
    1. 몇 가지 사소한 문제를 처리합니까?
    1. 파일 이름 이름을 바꾸면 일반적으로 파일 이름 앞에 접두사로 UUID를 생성할 수 있습니다.
    2. 개별 파일 크기 제한
    3. 파일 유형 제한
    4. 총 파일 크기 제한
    2. Struts2에서 FileUpload 차단기를 사용하여 이러한 속성 값을 설정할 수 있습니다.
    FileUpload 차단기는 세 가지 속성을 설정할 수 있습니다.
  • maximumSize: 업로드 단일 파일의 최대 길이(바이트 단위), 기본값은 2MB
  • allowedTypes: 파일을 업로드할 수 있는 유형, 유형별로 쉼표로 구분
  • allowedExtensions: 파일 확장자를 업로드할 수 있으며, 각 확장자는 쉼표로 구분됩니다
  • struts에서 가능합니다.xml 파일에 이 3개 속성 덮어쓰기
  • 주의: org에 있습니다.apache.struts2의 default.properties에는 업로드된 파일의 전체 크기에 대한 제한이 있습니다.이 제한struts를 상수로 수정할 수 있습니다.multipart.maxSize=2097152
    
    <constant name="struts.devMode" value="true"/>
    
     <!--   -->
     <constant name="struts.multipart.maxSize" value="2097152"/>
     <package name="default" namespace="/" extends="struts-default">
      <interceptors>
        <interceptor-stack name="myInterceptor">
          <interceptor-ref name="defaultStack">
            <!--  ,Commons FileUpload   2M -->
            <param name="fileUpload.maximumSize">57,408</param>
            <!--   -->
            <param name="fileUpload.allowedTypes">image/pjpeg,image/gif</param>
            <!--   -->
            <param name="fileUpload.allowedExtensions">jpg,gif</param>
          </interceptor-ref>
        </interceptor-stack>
      </interceptors>
    
      <default-interceptor-ref name="myInterceptor"></default-interceptor-ref>
      
      <action name="testUpload" class="org.pan.action.UploadAction" method="testUpload">
        <result name="success">/WEB-INF/views/success.jsp</result>
        <result name="input">/upload.jsp</result>
      </action>
    </package>
    
    하나.파일 업로드와 관련된 오류 메시지?
    1. 파일 업로드와 관련된 오류 메시지는struts-messages에 있습니다.properties 파일에 미리 정의되어 있습니다.
    2. Action에 해당하는 리소스 파일을 파일에 업로드하거나 i18nn_zh_CN.properties 국제화 자원 파일에서 오류 메시지 재정의
    
    struts.messages.error.file.too.large= 
    struts.messages.error.content.type.not.allowed= 
    struts.messages.error.file.extension.not.allowed= 
    struts.messages.upload.error.SizeLimitExceededException= 
    파일 다운로드

  • 어떤 응용 프로그램에서는 사용자의 브라우저에 동적으로 파일을 보내야 할 수도 있지만, 이 파일의 이름과 저장 위치는 프로그래밍할 때 예측할 수 없다
  • Stream 결과 유형
  • Struts는 파일 다운로드를 위한 Stream 결과 유형을 제공합니다.Stream 결과를 사용할 때 JSP 페이지를 준비할 필요가 없습니다.
  • Stream 결과 유형은 다음과 같이 설정할 수 있습니다.
  • contentType: 다운로드된 파일의 MIME 유형입니다.기본값은 text/plain
  • contentLength: 다운로드된 파일의 크기, 바이트 단위
  • contentDisposition: 파일 이름을 다운로드하는 ContentDispositon 응답 헤더를 설정할 수 있습니다. 기본값은 inline입니다. 보통 다음과 같은 형식으로 설정됩니다.
  • attachment;filename="document.pdf".
  • inputName: Action에서 제공하는 파일의 입력 흐름입니다.기본값은 inputStream
  • bufferSize: 파일 다운로드 시 버퍼 크기입니다.기본값은 1024
  • allowCaching: 파일을 다운로드할 때 캐시를 사용할 수 있습니까?기본값은true
  • contentCharSet: 파일을 다운로드할 때의 문자 인코딩입니다.
  • 이상의 매개 변수는 Action에서 getter 방법으로 제공할 수 있습니다!
  • Stream 결과 유형의 매개변수는 Action에서 속성으로 덮어쓸 수 있습니다
  • 구체적인 사용 세부 사항은 struts-2.3.15.3-all/struts-2.3.15.3/docs/WW/docs/stream-result.html

  • 예제 코드
  • 
    <a href="testDownLoad"> </a>
    
    public class DownLoadAction extends ActionSupport{
      // Action  
      @Setter@Getter
      private String contentType;
      @Setter@Getter
      private long contentLength;
      @Setter@Getter
      private String contentDisposition;
      @Setter@Getter
      private InputStream inputStream;
    
      public String testDownLoad() throws FileNotFoundException, UnsupportedEncodingException {
        // ServletContext
        ServletContext servletContext = ServletActionContext.getServletContext();
        // 
        String realPath = servletContext.getRealPath("/WEB-INF/file/ .mp3");
        // 
        inputStream = new FileInputStream(realPath);
        // 
        contentType = servletContext.getMimeType(realPath);
        // 
        contentLength = new File(realPath).length();
        // 
        String fileName = " .mp3";
        fileName = new String(fileName.getBytes("gbk"),"iso8859-1");
        contentDisposition = "attachment;filename="+fileName;
        return SUCCESS;
      }
    }
    
    
    
    <!--   -->
    <action name="testDownLoad" class="org.pan.action.DownLoadAction" method="testDownLoad">
      <result type="stream">
        <!--   -->
        <param name="bufferSize">2048</param>
      </result>
    </action>
    이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

    좋은 웹페이지 즐겨찾기