Spring Mvc 기반 Excel 파일 업로드 다운로드 예

6951 단어 springmvcexcel
최근 작업에서 excel 템플릿을 다운로드하고 편집한 후 분석을 업로드하여 데이터베이스에 저장해야 합니다.그래서 회사의 구조를 더욱 잘 이해하기 위해 저는 먼저spring mvc로 예를 하나 실현했습니다.
기본 프레임
이전에 가장 간단한spring mvc 프로젝트를 어떻게 구축하는지 소개한 적이 있다컨베이어 여기 있어요. .
이번에는 이 프로젝트를 바탕으로 업로드 다운로드의 작은 예를 계속 실현한다.다음 작업을 수행해야 합니다.
1 인덱스를 추가합니다.html,form 제출 파일 추가
2commons-fileupload,commons-io,jxl 등 도구 패키지 도입
3 업로드 다운로드 인터페이스 만들기
4 multipartResolver bean 주입
5 업로드에서 HttpServletRequest를 사용하여 파일 흐름을 가져와 WorkBook을 통해 확인
6 다운로드에서 HttpServerResponse를 통해 파일 흐름으로 돌아가 다운로드 가능
페이지
페이지는 매우 간단하지만 사실은form 탭입니다. 주의해야 할 것은 다음과 같습니다.
  • form에서 enctype = "multipart/form-data"
  • action이 지정한 URL입니다
  • input에서name 속성을 설정해야 백엔드에서 파일 대상을 얻을 수 있습니다
  • 
    <form role="form" action="/upload" method="POST" enctype="multipart/form-data">
      <div class="form-group">
        <label for="file"> </label>
        <input type="file" id="file" name="file">
      </div>
      <button type="submit" class="btn btn-default"> </button>
    </form>
    commons-fileupload, jxl 등 도구 패키지 도입
    관련된 jar 패키지는 다음과 같습니다.
  • commons-fileupload는 업로드 파일을 가져오는 데 사용됩니다
  • jxl은 excel을 해석하는 데 사용됩니다
  • 
    <!-- springframework begins -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>4.0.0-b01</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/jexcelapi/jxl -->
        <dependency>
          <groupId>jexcelapi</groupId>
          <artifactId>jxl</artifactId>
          <version>2.6</version>
        </dependency>
    Xml 구성
    웹에서xml에서 기본 접근 페이지를 설정해야 합니다. 이전에 차단을 설정한 요청은/이기 때문에 모든 정적 페이지를 설정하지 않으면 차단됩니다.
    
    <welcome-file-list>
      <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    스프링의 프로필에 CommonsMultipartResolver의 bean을 추가합니다.
    
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- set the max upload size100MB -->
        <property name="maxUploadSize">
          <value>104857600</value>
        </property>
        <property name="maxInMemorySize">
          <value>4096</value>
        </property>
      </bean>
    업로드 코드
    
    @RequestMapping("upload")
      public void upload(HttpServletRequest request, HttpServletResponse response) throws IOException, BiffException, WriteException {
        MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
        MultipartFile file = mRequest.getFile("file");
        Workbook workbook = Workbook.getWorkbook(file.getInputStream());
        // Sheet 
        Arrays.stream(workbook.getSheets())
            .forEach(sheet -> {
              int size = sheet.getRows();
              for(int i=0; i<size; i++){
                // , 
                Arrays.stream(sheet.getRow(i)).forEach(cell -> System.out.println(cell.getContents().equals("")?' ':cell.getContents()));
              }
            });
    
        response.setHeader("Content-Disposition", "attachment; filename=return.xls");
        WritableWorkbook writableWorkbook = ExcelUtils.createTemplate(response.getOutputStream());
        writableWorkbook.write();
        writableWorkbook.close();
      }
    
    
    코드 다운로드
    
    @RequestMapping("download")
      public void download(HttpServletRequest request, HttpServletResponse response) throws IOException, BiffException, WriteException {
        response.setHeader("Content-Disposition", "attachment; filename=template.xls");
        WritableWorkbook writableWorkbook = ExcelUtils.createTemplate(response.getOutputStream());
        writableWorkbook.write();
        writableWorkbook.close();
      }
    
    템플릿 클래스
    
    static class ExcelUtils {
        public static WritableWorkbook createTemplate(OutputStream output) throws IOException, WriteException {
          WritableWorkbook writableWorkbook= Workbook.createWorkbook(output);
          WritableSheet wsheet = writableWorkbook.createSheet(" title", 0);
    
    
          CellFormat cf = writableWorkbook.getSheet(0).getCell(1, 0).getCellFormat();
          WritableCellFormat wc = new WritableCellFormat();
          //  
          wc.setAlignment(Alignment.CENTRE);
          //  
    //    wc.setBorder(Border.ALL, BorderLineStyle.THIN);
          wc.setBackground(jxl.format.Colour.GREEN);
    
          Label nc0 = new Label(0, 0, " 1",wc);//Label(x,y,z) x x+1 , y+1 ,  z
          Label nc1 = new Label(1, 0, " 2",wc);
          Label nc2 = new Label(2, 0, " 3",wc);
          Label nc3 = new Label(0, 1, "dddd");
          Label nc4 = new Label(1, 1, "ffff");
    
    
          wsheet.addCell(nc0);
          wsheet.addCell(nc1);
          wsheet.addCell(nc2);
          wsheet.addCell(nc3);
          wsheet.addCell(nc4);
    
          return writableWorkbook;
        }
      }
    
    
    마지막 공헌 아래 관련 코드:SpringTest_jb51.rar
    이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

    좋은 웹페이지 즐겨찾기