一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 基于Spring Mvc實現的Excel文件上傳下載示例

基于Spring Mvc實現的Excel文件上傳下載示例

2020-08-19 11:39xingoo Java教程

本篇文章主要介紹了基于Spring Mvc實現的Excel文件上傳下載示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

基礎框架

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

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

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

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

3 創建upload download接口

4 注入multipartResolver bean

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

6 在download中通過HttpServerResponse返回文件流,實現下載

頁面

頁面很簡單,其實就是一個form標簽,需要注意的是:

  • form中enctype="multipart/form-data"
  • action指定訪問的url
  • input中需要設置name屬性,這樣后端才能獲取到文件對象
?
1
2
3
4
5
6
7
<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
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!-- 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中需要配置默認的訪問頁面,因為之前已經設置過攔截的請求是/,因此如果不設置所有的靜態頁面都會被攔截下來。

?
1
2
3
<welcome-file-list>
  <welcome-file>index.html</welcome-file>
</welcome-file-list>

在spring的配置文件中,加入CommonsMultipartResolver的bean。

?
1
2
3
4
5
6
7
8
9
<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>

上傳代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@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();
  }

下載代碼

?
1
2
3
4
5
6
7
@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();
  }

模板類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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.rar

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

原文鏈接:http://www.cnblogs.com/xing901022/p/6107048.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本粉色视频 | 成人福利在线视频免费观看 | 欧美一区二区视频 | 亚洲成年人免费网站 | 久久精品中文騷妇女内射 | 99国产成人精品2021 | 免费看麻豆视频 | 99re免费在线视频 | 亚洲国产剧情中文视频在线 | 久久亚洲国产成人影院 | 国产一区精品视频 | 亚洲免费在线观看视频 | vomoulei成人舞蹈 | 国色天香视频资源网 | 成人在线免费观看视频 | 欧美国产日本精品一区二区三区 | 男人久久天堂 | 国产精品99爱免费视频 | 日本高清色视影www日本 | 亚洲天堂色图 | 调教女秘书 | 国产精品久久久天天影视香蕉 | 星空无限传媒xk8129 | 精品国产一区二区三区久久久蜜臀 | 国产在视频线在精品 | 麻豆资源 | 亚洲国产成人久久精品hezyo | 亚洲香蕉综合在人在线视看 | 欧美成人禁片在线观看俄罗斯 | 我要看黄色毛片 | 精品成人网| 日韩欧美在线观看综合网另类 | 北岛玲在线播放 | 99在线在线视频免费视频观看 | 欧美日韩成人在线 | 91精品乱码一区二区三区 | 成人 在线欧美亚洲 | 国产区香蕉精品系列在线观看不卡 | 天天操精品| 国产精品久久久久影院色老大 | 卫生间被教官做好爽HH视频 |