vue+axios请求实现下载功能

白也 lol

实验环境

版本为:
“vue”: “^2.6.14”,
“axios”: “^1.2.1”,
“element-ui”: “^2.4.5”,

具体代码

  1. UI界面,具体代码参考GitHub,若对您有帮助,还希望您点一个Star。
    1
    2
    3
    4
    5
    <el-button
    size="mini"
    type="success" plain
    @click="downloadFile(scope.$index, scope.row)">下载
    </el-button>
  2. js逻辑
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    downloadFile(index,row){
    axios.get('/api/download',{
    params: { // 请求参数拼接在url上
    fileName: row.fileName
    },responseType: "blob"
    }).then(res=>{
    const type = String(row.fileName.split('.').slice(-1));
    let blob = new Blob([res.data], {
    type: type //这里需要根据不同的文件格式写不同的参数,例如:.mp3、.mp4
    });
    let eLink = document.createElement("a");
    eLink.download = row.fileName; //这里需要自己给下载的文件命名
    eLink.style.display = "none";
    eLink.href = URL.createObjectURL(blob);
    document.body.appendChild(eLink);
    eLink.click();
    URL.revokeObjectURL(eLink.href);
    document.body.removeChild(eLink);
    })
    },
  3. SpringBoot 后端接口,整合minio,具体代码参考GitHub,若对您有帮助,还希望您点一个Star。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
       /**
    * 下载文件 serverImpl层
    *
    * @param fileName 文件名
    */
    @Override
    public R download( HttpServletResponse response, String fileName) {
    // get object given the bucket and object name
    try (InputStream stream = minioClient.getObject(
    GetObjectArgs.builder()
    .bucket(bucket)
    .object(fileName)
    .build())) {
    // Read data from stream
    //浏览器指定下载类型
    response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));
    //下载文件
    IOUtils.copy(stream, response.getOutputStream());
    }catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException e){
    log.error(e.getMessage());
    return R.error().message("下载失败");
    }
    return R.success().message("下载成功");
    }
    1
    2
    3
    4
    5
    /**
    * 下载文件 server
    * @param fileName 文件名
    */
    R download(HttpServletResponse response, String fileName);
    1
    2
    3
    4
    5
    6
    7
    8
    /**
    * 下载文件 controller层
    * @param fileName 文件名
    */
    @GetMapping("/download")
    public R download(HttpServletResponse response,String fileName){
    return R.success().map("data",fileService.download(response,fileName));
    }
  • 本文标题:vue+axios请求实现下载功能
  • 本文作者:白也
  • 创建时间:2022-12-25 23:01:13
  • 本文链接:https://bm4578.github.io/2022/12/25/vue-axios实现下载功能/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论