不想努力的程序员 2023-11-10 13:34 采纳率: 52.5%
浏览 2
已结题

springboot+vue下载文件乱码

在项目中使用文件流进行下载,下载后文件乱码,代码如下

@GetMapping("downAssessmentFile")
    public ResultUtils<String> downAssessmentFile(String path, HttpServletRequest request, HttpServletResponse response) {

        //读取文件
        OutputStream outputStream = null;
        InputStream inputStream = null;
        BufferedInputStream bufferedInputStream = null;
        byte[] bytes = new byte[1024];
        File file = new File(path);
        String fileName = file.getName();
        try {
            // StandardCharsets.ISO_8859_1 *=UTF-8'
            // response.setHeader("Content-Disposition", "attachment;filename=" +  new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            // 以流的形式返回文件
            response.setContentType("application/octet-stream;charset=utf-8");
            inputStream = new FileInputStream(file);
            bufferedInputStream = new BufferedInputStream(inputStream);
            outputStream = response.getOutputStream();
            int i = bufferedInputStream.read(bytes);
            while (i != -1) {
                outputStream.write(bytes, 0, i);
                i = bufferedInputStream.read(bytes);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }
                if (outputStream != null) {
                    outputStream.close();
                }
                if (bufferedInputStream != null) {
                    bufferedInputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return ResultUtils.success();

        }

    }


}

直接传绝对的路径,前端代码如下


const downSingleFile = (item:any) => {
  let list = {
    path:item
  }

  downAssessmentFile(list).then(async function (res: any) {
    // 处理成功情况
    console.log(res)

    // let link = document.createElement('a')
    // link.href = res.data    //url文件地址
    // link.download = item.useTitleName  //加上下载的文件名
    //
    // link.click()
    // link.remove()
    let title = "文件"

    //下载文件
    var fileURL = window.URL.createObjectURL(new Blob([res]));
    console.log(fileURL, 'fileURL')
    var fileLink = document.createElement('a');
    fileLink.href = fileURL;
    fileLink.setAttribute('download',title );
    document.body.appendChild(fileLink);
    fileLink.click();



  }) .catch(function (error) {
    // 处理错误情况
    console.log(error)
  });
}

下载后文件类型不正确,文件内容乱码
打断点如下图

img

path是有值的,下载后的文件是一个text文件

img


是哪里有问题,请指教

  • 写回答

3条回答 默认 最新

  • Huazie 全栈领域优质创作者 2023-11-10 15:53
    关注

    不是,你的 xlsx 文件,你用 文本方式打开 ???
    你用excel 或者wps 打开看看呢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 已采纳回答 11月16日
  • 创建了问题 11月10日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集