当前位置: 首页 > 知识库问答 >
问题:

Spring Boot减少大型CSV文件的下载时间

穆建华
2023-03-14
public File dataToCSV(List<String[]> dataLines) throws IOException {

    File csvOutputFile = new File("supply_tracker_" + LocalDateTime.now() + ".csv");
    try (PrintWriter pw = new PrintWriter(csvOutputFile)) {
        dataLines.stream()
                .map(data -> String.join(",", data))
                .forEach(pw::println);
    }
    return csvOutputFile;
}

public ResponseEntity<Object> getFile(File csv) throws FileNotFoundException {
    if (csv != null) {
        InputStreamResource resource = new InputStreamResource(new FileInputStream(csv));
        long length = csv.length();
        boolean delete = csv.delete();
        if (delete) {
            HttpHeaders headers = new HttpHeaders();
            headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", csv.getName()));
            return ResponseEntity.ok()
                    .headers(headers)
                    .contentLength(length)
                    .contentType(MediaType.parseMediaType("text/csv"))
                    .body(resource);
        }
    } else {
        return ResponseEntity.status(HttpStatus.NO_CONTENT).body(null);
    }
    return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}

有哪些方法可以减少响应时间?另外,是否有一个临时的解决方案可以使此工作在Safari上?前端在React中,API处理axios调用。

共有1个答案

吕天逸
2023-03-14

我建议使用ResponseBodyEmitter

这里的大问题是,在服务器开始响应之前,客户端必须等待响应100%准备好。

一旦等待时间超过读取超时(通常为30s),就会出现超时错误。延长超时时间是一个非常短期的解决方案。

 类似资料:
  • 问题内容: 有什么办法可以减少jar文件的大小? 我想要一个减少未使用依赖性的工具。 我使用Maven进行依赖管理。 问题答案: 从Maven的角度来看,JAR文件通常不包含依赖项。因此,您必须在谈论: WAR或EAR或类似文件, 通过合并大量JAR文件而产生的所谓的UberJAR文件;例如使用Maven阴影插件,或 依赖比Maven模块更精细。 在前两种情况下,可以通过在依赖关系规范或war或s

  • 我正在读麦金尼的数据分析书,他共享了150MB文件。虽然这个主题已经在进度条上进行了广泛的讨论,而下载文件超文本传输协议与请求,我发现在接受的答案中的代码抛出一个错误。我是初学者,所以我无法解决这个问题。 我想下载以下文件: 以下是没有进度条的代码: 这很有效,但是因为没有进度条,我想知道发生了什么。 下面是通过http下载带有请求的文件时从进度条改编的代码,以及如何使用python下载带有请求的

  • 问题内容: 我用Xcode 6.1和Swift制作了一个非常简单的iPhone应用程序。我对ios开发真的很陌生,遇到了一个134 mb的应用程序!当然这是不可接受的。 我的所有屏幕尺寸的背景图像加起来总计20 mb。就是这样!我将这些图像存储在xcassets中,因为那是我猜的首选方式。 我认为该应用程序不应超过25 mbs。 我发现我的项目中有一些参考文献加倍。我删除了这些,但我的.app文件

  • 问题内容: 我已经为Java项目开发了一个模块。该模块取决于外部库()。问题是,该文件比整个项目本身(14 MB)大两倍。我仅使用库中类的一小部分。该模块现已完成,将来没有人会对其进行扩展。有没有一种方法可以将相关类仅提取给某些类,以便其他人不必下载所有这些额外的内容? 问题答案: ProGuard之类的混淆工具通常提供从jar文件中删除未使用的类(甚至字段和方法)的功能。但是,您必须小心确认所有

  • 我刚刚在google Drive中得到了一个500MB文件的大列表。我该如何在本地Linux机器上排队下载它们呢? 我不能把它们都压缩成一个大的下载 我无法将它们全部设置为一次下载 我不能整天都在这里小批量下载它们。 我从google drive的wget/curl大型文件这样的文档中看到,google drive的api被贬低了,我们不能wget它们。 所以我正在寻找一种从谷歌驱动器按顺序下载大

  • 问题内容: 让我们比较一下c:Hello_world.c: Hello_world.go: 都编译: 还有,这是什么? 大约1Mb的世界。你在跟我开玩笑吗?我做错了什么? (仅限Hello_go-> 893K) 问题答案: 文件较大是否有问题?我不知道Go,但是我认为它会静态链接某些运行时库,而C程序则不是这种情况。但是,只要程序变大,就不必担心。 如上所述这里,静态链接Go运行时是默认的。该页面