简单的关于excle的上传和下载(上)

简单的关于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) {

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值