简单的关于excle的上传和下载(上)
引言:
关于excle的上传和下载,可以参考easyExcle
官网:https://easyexcel.opensource.alibaba.com/
方便自己以后看
1.上传
前端
关于前端,首先简单的只需要添加一个按键,触发事件,弹出一个dialog
button按钮
<el-button type="primary" @click="importData"><i class="fa fa-plus"/> 导入</el-button>
设置一个dialog
<el-dialog title="导入" :visible.sync="dialogImportVisible" width="480px"> ---这个dialogImportVisible就是中文的意思单窗可见,默认false
<el-form label-position="right" label-width="170px">
<el-form-item label="文件">
<el-upload
:multiple="false" ----这个设置的是否允许多个
:on-success="onUploadSuccess"
:action="'http://localhost:9001/admin/cmn/dict/upload'"
class="upload-demo">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传xls文件,且不超过500kb</div>
</el-upload>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogImportVisible = false">取消</el-button>
</div>
</el-dialog>
写出所要的方法
一个dialogImportVisible和onUploadSuccess
importData() {
this.dialogImportVisible = true
},
onUploadSuccess(response, file) {
this.$message.info('上传成功')
this.dialogImportVisible = false
//这里需要刷新一下,更新页面
},
简单的一个模版
后端
思路:这是一个post请求,写出请求路径,然后在controller层调用service层的方法,然后这个需要配置监听器,这里使用流的方式
controller层
@ApiOperation(value = "导入")
@PostMapping("upload")
public R importData(MultipartFile file) {
dictService.importDictData(file);
return R.ok();
}
service层
@Autowired
private DictListener dictListener;
@Override
public void importDictData(MultipartFile file) {
try {
EasyExcel.read(file.getInputStream(),DictEeVo.class,dictListener).sheet().doRead();
} catch (IOException e) {
e.printStackTrace();
}
}
这里需要提前写出listener
listener如何写:看完官网上写着,首先是继承AnalysisEventListener,然后重写invoke 和doAfterAllAnalysed这两个方法的含义
invoke:它在每次分析(可能是文本分析)事件被触发时调用
doAfterAllAnalysed:有分析事件处理完毕后调用 ----->这个因为是简单的实例所以就没有用
public class DictListener extends AnalysisEventListener<DictEeVo> {
@Autowired
private DictMapper dictMapper;
//一行一行读取
@Override
public void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {
//调用方法添加数据库
Dict dict = new Dict();
BeanUtils.copyProperties(dictEeVo,dict);
QueryWrapper<Dict> queryWrapper = new QueryWrapper<Dict>();
queryWrapper.eq("id", dict.getId());
Integer count = dictMapper.selectCount(queryWrapper);
if(count>0){
dictMapper.updateById(dict);
}else{
dictMapper.insert(dict);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}