您好,登錄后才能下訂單哦!
最近工作遇到一個需求,需要下載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 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包有:
<!-- 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中需要配置默認的訪問頁面,因為之前已經設置過攔截的請求是/,因此如果不設置所有的靜態頁面都會被攔截下來。
<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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。