springboot+vue+elementUI进行文件的下载

27 篇文章 0 订阅
26 篇文章 2 订阅


本人技术有限写的不好的地方敬请原谅,如有什么问题或者更好的建议大家可以留言或者私信

前言

学成在线在线项目,教程中没有提到模板管理本人实现之后。忽略了一个重要的问题就是模板文件的下载,需要更改模板文件的内容化的时候只需要下载最新的进行更改然后重新上传即可

模板管理实现的详细代码与步骤请参考这个分类下的文章:https://blog.csdn.net/weixin_45305953/category_9836467.html


一、解决思路

前端携带模板ID进行请求服务端代码,服务端获取到ID查询到数据信息之后,转换成byte[]然后进行返回即可。这里没有实现选择目录保存,百度了很多方式试了也没有用如果各位有比较好的想法可以私聊或直接评论进行更改

二、服务端:xc-service-manage-cms工程

1.api与controller

//controller下载模板
@Override
@GetMapping("/downloadTemplateFile/{templateFileId}")
public byte[] downloadTemplateFile(@PathVariable("templateFileId") String templateFileId, HttpServletRequest request, HttpServletResponse response) {
    return  this.templateService.downloadTemplateFile(templateFileId,request,response);
}
 @ApiOperation("下载模板文件")
 public byte[] downloadTemplateFile(String templateFileId, HttpServletRequest request, HttpServletResponse response);

2.service

//service下载模板文件
public byte[] downloadTemplateFile(String templateId,HttpServletRequest request, HttpServletResponse response) {
    //根据templateId查询模板对象
    Optional<CmsTemplate> optional = this.cmsTemplateRepository.findById(templateId);
    if (!optional.isPresent()){
        ExceptionCast.cast(CommonCode.INVALID_PARAM);
        log.error("参数异常,查询不到对应的模板信息;templateId:"+templateId);
        return null;
    }
    //获取模板对象
    CmsTemplate cmsTemplate = optional.get();
    //获取模板文件Id
    String templateFileId = cmsTemplate.getTemplateFileId();
    //使用GridFSFile获取模板对象对应的模板文件(根据模板文件Id)
    GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(templateFileId)));
    //获取文件的名称
    String filename = gridFSFile.getFilename();
    //打开下载流对象(指定文件名称)
    GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(filename);
    //创建gridFsResource,用于获取流对象(参数1:获取的文件名称,参数2下载流对象)
    GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFSDownloadStream);
    //设置reponse响应头,真实文件名重命名,就是在这里设置,设置编码
    response.setHeader("Content-Disposition", "attachment; filename="+ filename);
    response.setHeader("Content-Length", String.valueOf(gridFSFile.getLength()));
    try {
        byte[] bytes = IOUtils.toByteArray(gridFsResource.getInputStream());
        return bytes;
    } catch (IOException e) {
        e.printStackTrace();
        log.error("下载模板文件失败,模板Id:"+templateId);
        return null;
    }
}

二.前端

1.template_list.vue页面

增加一个下载模板文件的按钮

<!--插槽可以列出多个操作按钮-->
<template slot-scope="page">
  <el-button size="small" type="text" @click="edit(page.row.templateId)">编辑</el-button>
  <el-button size="small" type="text" @click="del(page.row.templateId)">删除</el-button>
  <el-button size="small" type="text" @click="download(page.row.templateId)">下载模板</el-button>
</template>

2.发送下载请求的方法

//template_list.vue中需要导入的文件
  let sysConfig = require('@/../config/sysConfig')
  let apiUrl = sysConfig.xcApiUrlPre;
  import http from './../../../base/api/public';
//下载模板文件
download:function (templateId) {
  this.$confirm('确认下载此模板,重新编写上传吗?', '提示', {}).then(()=>{
 	window.location.href=apiUrl+"/cms/template/downloadTemplateFile/"+templateId;
  })
},

测试

点击下载模板会发送请求把对应的模板文件下载到浏览器默认下载目录,修改完成之后重新上传修改后的文件即可
如果可以实现选择目录下载请私信或私聊我

本人技术有限如有任何问题,或者更好的解决方法直接评论私聊我即可

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要 在如今这个人才需求量大的时代,各方企业为了永葆企业的活力与生机,在不断开 拓进取的同时,又广泛纳用人才,为企业的长久发展奠定了基础。于是,各个企业与部 门机构,都不可避免地会接触到人力资源管理的问题。 Hrm 是一款人力资源管理系统,其主要功能模块有员工个人信息修改、请假、员工 的薪资管理、考勤管理、社保管理。其中考勤管理实现了员工考勤状态的修改与员工考 勤月报表的导出,以及通过员工考勤记录的导入来实现员工考勤状态的判断。社保管理, 主要实现了员工社保的计算以及明细的修改。薪资管理,实现了员工工资的调,以及 员工月工资报表的导出。 本项目采用了前后端分离的技术,前端是基于 Vue+ElementUI+Axios 开发的,后端 则是基于 Spring Boot+MyBatis Plus+ Jwt+Mysql。本项目实现了权限菜单管理,通过员 工的权限动态渲染菜单,并动态生成路由。通过 Jwt token 来判断当前登录的员工以及 员工的登录状态。 关键词:人力资源管理系统,Spring Boot,Vue,权限管 人力资源管理是企业运营中必不可少的一环,它关系到企业的前途与发展。尤其对 于中小微企业来说,对企业的发展有着举足轻重的作用。随着近年来,政府对创业项目 的大力扶持,我国创业型企业蓬勃发展。据统计,2019 年,我国创业企业数量已达 1810 万余家,占全国企业数的 97%,截止 2020 年,我国创业企业数量达到了 2030 万,同比 增长 10%。虽然我国创业企业的基数在不断增大,但是能够长久存活的企业却少之又少。 在创业初期,随着企业初具规模,大多数创业者开始将主要精力集中在市场调研和 开发产品上,而忽略了团队的内部管理。据调查,中国企业的平均寿命是 7.02 年,但 70%的企业存活不超过 5 年,究其原因有很多,其中最重要的一点就是,人力资源管理 未能有效推动企业向前发展
1. 后端实现文件下载 在Spring Boot中,我们可以使用以下代码实现文件下载: ```java @GetMapping("/download") public ResponseEntity<Resource> downloadFile() throws IOException { Resource resource = new UrlResource("file:/path/to/file"); HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\""); return ResponseEntity.ok().headers(headers).contentLength(resource.contentLength()).contentType(MediaType.APPLICATION_OCTET_STREAM).body(resource); } ``` 其中,`UrlResource`是Spring提供的获取文件资源的类,`HttpHeaders.CONTENT_DISPOSITION`设置文件下载方式为附件,`MediaType.APPLICATION_OCTET_STREAM`指定文件类型为二进制流。 2. 前端实现文件下载Vue中,我们可以使用Element UI中的`el-button`组件来实现文件下载: ```html <el-button type="primary" icon="el-icon-download" @click="downloadFile">下载文件</el-button> ``` 在Vue组件中,我们需要定义`downloadFile`方法来实现文件下载: ```javascript downloadFile() { window.location.href = '/download'; } ``` 其中,`window.location.href`将页面重定向到下载链接,即后端实现的文件下载接口。 需要注意的是,如果需要传递参数给后端,可以使用axios或者fetch来发送GET或POST请求,将参数传递给后端,再在后端实现文件下载。具体实现方法可以参考以下代码: ```javascript downloadFile() { axios.get('/download', { params: { filename: 'example.txt' }, responseType: 'blob' }).then(response => { const blob = new Blob([response.data], {type: 'application/octet-stream'}) const url = window.URL.createObjectURL(blob) const link = document.createElement('a') link.href = url link.download = 'example.txt' link.click() window.URL.revokeObjectURL(url) }) } ``` 在这个例子中,我们使用了axios来发送GET请求,`params`中传递了参数filename,`responseType`设置返回类型为二进制流。在请求成功后,我们将返回的数据转换为Blob对象,通过URL.createObjectURL方法生成下载链接,然后创建一个a标签并设置download属性,模拟点击a标签来下载文件。最后使用URL.revokeObjectURL方法释放资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值