java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载

java相关:SpringMVC下实现Excel文件上传下载

发布于 2020-6-21|

复制链接

摘记: 在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据、下载统计数据等等场景。针对这个问题,我写了个基于SpringMVC的简单上传下载示例,其中Excel的处理使用Apache的POI组件。主要依赖的包如下:

```xml

commons-io ..

在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据、下载统计数据等等场景。针对这个问题,我写了个基于SpringMVC的简单上传下载示例,其中Excel的处理使用Apache的POI组件。主要依赖的包如下:

```xml

commons-io

commons-io

2.4

commons-fileupload

commons-fileupload

1.3.1

org.springframework

spring-web

4.0.0.RELEASE

org.springframework

spring-webmvc

4.0.0.RELEASE

org.apache.poi

poi

3.10.1

```

相关处理类:(一)Controller类

```java

package com.research.spring.controller;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.servlet.ModelAndView;

import com.research.spring.model.UserInfo;

import com.research.spring.view.ExcelView;

@Controller

@RequestMapping("/file")

public class FileController {

/**

* Excel文件上传处理

* @param file

* @return

*/

@RequestMapping("/upload")

public ModelAndView uploadExcel(@RequestParam("file") MultipartFile file){

List list = new ArrayList();

//这里只处理文件名包括“用户”的文件,模板使用下载模板

if( file.getOriginalFilename().contains("用户") ){

try {

Workbook wb = new HSSFWorkbook(file.getInputStream());

Sheet sheet = wb.getSheetAt(0);

for( int i = 1; i list = new ArrayList();

UserInfo userInfo = new UserInfo();

userInfo.setPassword("0000");

userInfo.setUserName("sdfas");

list.add(userInfo);

list.add(userInfo);

list.add(userInfo);

list.add(userInfo);

Map> map = new HashMap>();

map.put("infoList", list);

ExcelView ve = new ExcelView();

return new ModelAndView(ve,map);

}

}

```

(二)实体类

```java

package com.research.spring.model;

public class UserInfo {

private String userName;

private String password;

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

@Override

public String toString() {

return "UserInfo [userName=" + userName + ", password=" + password

+ "]";

}

}

```

(三)View类这个类在下载时用到,在Spring渲染页面时使用自定义的View类进行Excel的相关处理。

```java

package com.research.spring.view;

import java.io.OutputStream;

import java.net.URLEncoder;

import java.util.List;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.springframework.web.servlet.view.document.AbstractExcelView;

import com.research.spring.model.UserInfo;

/**

* 下载Excel视图

*

* @author wdmcygah

*

*/

public class ExcelView extends AbstractExcelView {

@Override

protected void buildExcelDocument(Map model,

HSSFWorkbook workbook, HttpServletRequest request,

HttpServletResponse response) throws Exception {

@SuppressWarnings("unchecked")

List list = (List) model.get("infoList");

if (list != null && list.size() != 0) {

int len = list.size();

Sheet sheet = workbook.createSheet();

// 第一行文字说明

Row row = sheet.createRow(0);

Cell cell = row.createCell(0, Cell.CELL_TYPE_STRING);

cell.setCellValue("用户名");

cell = row.createCell(1, Cell.CELL_TYPE_STRING);

cell.setCellValue("密码");

//下面是具体内容

for (int i = 0; i (四)主要配置文件上传文件时需要在配置文件中配置MultipartResolver类,配置后Spring会自动将文件传成MultipartFile对象,然后就可以进行相应的处理。示例看Controller类。

```java

```

(五)测试页面

```xhtml

测试下载Excel功能

测试上传Excel功能

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值