最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Spring Mvc實現(xiàn)的Excel文件上傳下載示例

 更新時間:2017年02月25日 16:30:19   作者:xingoo  
本篇文章主要介紹了基于Spring Mvc實現(xiàn)的Excel文件上傳下載示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近工作遇到一個需求,需要下載excel模板,編輯后上傳解析存儲到數(shù)據(jù)庫。因此為了更好的理解公司框架,我就自己先用spring mvc實現(xiàn)了一個樣例。

基礎框架

之前曾經(jīng)介紹過一個最簡單的spring mvc的項目如何搭建,傳送門在這里。

這次就基于這個工程,繼續(xù)實現(xiàn)上傳下載的小例子。需要做下面的事情:

1 增加index.html,添加form提交文件

2 引入commons-fileupload、commons-io、jxl等工具包

3 創(chuàng)建upload download接口

4 注入multipartResolver bean

5 在upload中使用HttpServletRequest獲取文件流,通過WorkBook進行解析

6 在download中通過HttpServerResponse返回文件流,實現(xiàn)下載

頁面

頁面很簡單,其實就是一個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的配置

在web.xml中需要配置默認的訪問頁面,因為之前已經(jīng)設置過攔截的請求是/,因此如果不設置所有的靜態(tài)頁面都會被攔截下來。

<welcome-file-list>
  <welcome-file>index.html</welcome-file>
</welcome-file-list>

在spring的配置文件中,加入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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解Springboot 注入裝配到IOC容器方式

    詳解Springboot 注入裝配到IOC容器方式

    今天通過實例代碼給大家介紹了Springboot 注入裝配到IOC容器方式,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • spring mvc利用ajax向controller傳遞對象的方法示例

    spring mvc利用ajax向controller傳遞對象的方法示例

    這篇文章主要給大家介紹了關于spring mvc利用ajax向controller傳遞對象的相關資料,文中通過示例代碼將步驟介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來跟著小編一起學習學習吧。
    2017-07-07
  • Spring實戰(zhàn)之類級別緩存實現(xiàn)與使用方法

    Spring實戰(zhàn)之類級別緩存實現(xiàn)與使用方法

    這篇文章主要介紹了Spring實戰(zhàn)之類級別緩存實現(xiàn)與使用方法,結合實例形式分析了Spring類級別緩存配置、屬性、領域模型等相關操作技巧,需要的朋友可以參考下
    2020-01-01
  • 超詳細講解SpringCloud?Commons公共抽象的用法

    超詳細講解SpringCloud?Commons公共抽象的用法

    這篇文章主要介紹了超詳細講解SpringCloud?Commons公共抽象的用法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • java讀取文件顯示進度條的實現(xiàn)方法

    java讀取文件顯示進度條的實現(xiàn)方法

    當讀取一個大文件時,一時半會兒無法看到讀取結果,就需要顯示一個進度條,是程序員明白已經(jīng)讀了多少文件,可以估算讀取還需要多少時間,下面的代碼可以實現(xiàn)這個功能
    2014-01-01
  • 超詳細的Spring Boot入門筆記(總結)

    超詳細的Spring Boot入門筆記(總結)

    本篇文章主要介紹了超詳細的Spring Boot入門筆記(總結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Java實現(xiàn)自定義中文排序的方法機注意事項

    Java實現(xiàn)自定義中文排序的方法機注意事項

    在Java中,中文排序通常涉及到使用Collator類來處理字符串的比較,確保根據(jù)漢字的拼音順序進行排序,本文給大家介紹了Java實現(xiàn)自定義中文排序的方法機注意事項,并有相關的代碼示例供大家參考,需要的朋友可以參考下
    2024-10-10
  • SpringCloud?Stream?整合RabbitMQ的基本步驟

    SpringCloud?Stream?整合RabbitMQ的基本步驟

    這篇文章主要介紹了SpringCloud?Stream?整合RabbitMQ的基本步驟,從項目介紹到生產(chǎn)者結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 關于文件合并與修改md5值的問題

    關于文件合并與修改md5值的問題

    這篇文章主要介紹了關于文件合并與修改md5值的問題,使用本博客的方法,不僅僅可以修改md5值,還可以達到隱藏文件的目的,需要的朋友可以參考下
    2023-04-04
  • TransactionSynchronization的invokeAfterCompletion事務源碼解析

    TransactionSynchronization的invokeAfterCompletion事務源碼解析

    這篇文章主要為大家介紹了TransactionSynchronization的invokeAfterCompletion事務源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09

最新評論

阳城县| 怀化市| 南木林县| 甘南县| 革吉县| 大余县| 尼木县| 彰武县| 综艺| 孟连| 民丰县| 丰都县| 应城市| 广德县| 石河子市| 金昌市| 图木舒克市| 麻栗坡县| 衡东县| 武义县| 长泰县| 天津市| 元阳县| 富民县| 团风县| 青浦区| 乌鲁木齐市| 焉耆| 蒙山县| 海盐县| 永济市| 县级市| 电白县| 讷河市| 阆中市| 长岛县| 太仆寺旗| 双柏县| 含山县| 乌什县| 阿拉善盟|