Vue+SpringBoot/SpringCloud轻松实现文件导入、存储到服务器

6 篇文章 0 订阅
4 篇文章 0 订阅

问题还原:


在做项目时,用户需要上传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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值