问题还原:
在做项目时,用户需要上传Excel模板,然后根据Excel模板中的内容取到对应的实时数据、计算并重新存储Excel。
解决方案:
Vue端相关代码如下:
定义按钮:
<el-button
type="primary"
icon="el-icon-upload2"
@click="handleImport"
>
导入2
</el-button>
<input
id="import-excel"
type="file"
style="display:none;"
@change="importExcel"
/>
JS方法:
methods: {
handleImport () {
document.getElementById('import-excel').value = ''
return document.getElementById('import-excel').click()
},
importExcel (e) {
const files = e.target.files
if (files.length > 0) {
const form = new FormData()
form.append('myFile', files[0])
this.$axios.post('/接口地址……', form).then((response) => {
if (response.code === 0) {
this.$message.success('上传成功!')
} else {
this.$message.error(response.msg || '系统错误,请重试!')
}
})
}
}
}
SpringBoot/SpringCloud端相关代码如下:
Controller层代码:
@PostMapping("/importExcel")
@ApiOperation(value = "导入Excel")
public ResponseWrapper<String> importExcel(@RequestParam(value = "myFile", required = false) MultipartFile myFile) {
if(myFile == null || myFile.isEmpty()) {
return new ResponseWrapper.Builder<String>().code(ReturnCodeEnum.ERROR_PARAM.getRtnCode()).message("文件为空,请选择文件!").build();
}else {
String transformerManagerPath = “D:\\ExcelTest\\”;//文件保存路径,注:这里需要根据实际情况做成bootstrap.yml参数配置或者数据库配置
File transformerManagerPathFile = new File(transformerManagerPath);
if(!transformerManagerPathFile.exists()) {
transformerManagerPathFile.mkdirs();//创建目录
}
String originalFilename = myFile.getOriginalFilename();
int lastIndex = originalFilename.lastIndexOf(".");//获取最后一个点的位置
long nowTime = System.currentTimeMillis();
String newFileName = originalFilename.substring(0, lastIndex) + "_" + nowTime + originalFilename.substring(lastIndex, originalFilename.length());
Path path = Paths.get(transformerManagerPath + newFileName);
try {
myFile.transferTo(path);
} catch (IOException e) {
e.printStackTrace();
return new ResponseWrapper.Builder<String>().code(ReturnCodeEnum.ERROR_PARAM.getRtnCode()).message("文件保存失败,请联系管理员!").build();
}
}
return new ResponseWrapper.Builder<String>().code(ReturnCodeEnum.SUCCESS.getRtnCode()).message(ReturnCodeEnum.SUCCESS.getMsg()).build();
}
注:笔者在代码中对原文件名加了当前时间戳处理。
PS:欢迎大家点赞、关注、支持。如有需要,欢迎添加博主QQ沟通交流!QQ:156587607