关于前端:前端如何实现下载另存为

3次阅读

共计 1923 个字符,预计需要花费 5 分钟才能阅读完成。

前端引入

// 放在内部工具类中不便提取
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 申请类型
在火狐设置外面关上总是询问, 即可每次提醒保留地位 
正文完
 0