前端如何实现下载另存为

Posted 棘丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端如何实现下载另存为相关的知识,希望对你有一定的参考价值。

前端引入

// 放在外部工具类中方便提取
export function downloadFile(obj, name, suffix) {
  const url = window.URL.createObjectURL(new Blob([obj]))
  const fileName = parseTime(new Date()) + \'-\' + name + \'.\' + suffix
  if (\'download\' in document.createElement(\'a\')) {
    // 支持a标签download的浏览器
    const link = document.createElement(\'a\') // 创建a标签
    link.download = fileName // a标签添加属性
    link.style.display = \'none\'
    link.href = url
    document.body.appendChild(link)
    link.click() // 执行下载
    URL.revokeObjectURL(link.href) // 释放url
    document.body.removeChild(link) // 释放标签
  } else {
    // 其他浏览器
    navigator.msSaveBlob(new Blob([obj]), fileName)
  }
}

后端

@Override
    public void download(List<GroupDto> queryAll, HttpServletResponse response) throws IOException {
        List<Map<String, Object>> list = new ArrayList<>();
        for (GroupDto groupDto : queryAll) {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("组名", groupDto.getName());
            map.put("创建时间", groupDto.getCreatedAt());
            map.put("更新时间", groupDto.getUpdatedAt());
            list.add(map);
        }
        FileUtil.downloadExcel(list, response);
    }
// 工具类
public static void downloadExcel(List<Map<String, Object>> list, HttpServletResponse response) throws IOException {
        String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
        File file = new File(tempPath);
        BigExcelWriter writer = ExcelUtil.getBigWriter(file);
        // 一次性写出内容,使用默认样式,强制输出标题
        writer.write(list, true);
        SXSSFSheet sheet = (SXSSFSheet)writer.getSheet();
        //上面需要强转SXSSFSheet  不然没有trackAllColumnsForAutoSizing方法
        sheet.trackAllColumnsForAutoSizing();
        //列宽自适应
        writer.autoSizeColumnAll();
        //response为HttpServletResponse对象
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
        response.setHeader("Content-Disposition", "attachment;filename=file.xlsx");
        ServletOutputStream out = response.getOutputStream();
        // 终止后删除临时文件
        file.deleteOnExit();
        writer.flush(out, true);
        //此处记得关闭输出Servlet流
        IoUtil.close(out);
    }

火狐浏览器下载时如何关闭提示如何处理文件

进去首先项配置
path:进入about:config
输入save查询当前首先响配置 添加一个配置信息
browser.helperApps.neverAsk.saveToDisk
application/octet-stream 请求类型
在火狐设置里面打开总是询问,即可每次提示保存位置

以上是关于前端如何实现下载另存为的主要内容,如果未能解决你的问题,请参考以下文章

C++ 代码片段(积累)

如何点击 IE 下载对话框,即(打开、保存、另存为...)

ArcGIS Engine c#如何实现另存为Mxd地图文档的功能,,求代码

下载 aspx 页面并将其另存为 HTML 页面 [关闭]

ASP.NET 中,实现download下载,弹出打开和保存对话框,不限制文件大小,跪求实现代码,谢谢了

HTML中保存,另存为,功能是如何实现的