【问题标题】:java 7 : response.flushBuffer(); does not Download csv in browserjava 7: 响应.flushBuffer();不在浏览器中下载 csv
【发布时间】:2019-08-07 10:41:21
【问题描述】:

我有一个 csv 媒体文件,我正在尝试逐行读取此 csv,需要在浏览器中下载。

response.flushBuffer(); 似乎没有开始下载。没有观察到错误。 我可以在网络下的浏览器响应选项卡中看到完整的数据,并且格式正确。只是无法冲洗它。

final MediaModel media = mediaService.getMedia(catalogVersionModelHeader, mediaIdentifier);
        final Collection<File> filesHeader = mediaService.getFiles(media);

        final BufferedReader br = new BufferedReader(new FileReader(filesHeader.iterator().next()));
        String line = "";
        final CSVWriter csvWriter = new CSVWriter(getOutputWriter());
        final Map<Integer, String> data = new HashMap<>();
        int counter = 0;
        try {
            while ((line = br.readLine()) != null) {
                data.put(new Integer(counter), line);
                csvWriter.write(data);
            }
            counter++;
        } catch (final IOException ioException) {
            LOG.error(ioException);
        }

        csvWriter.close();
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=\"" + "Report.csv" + "\"");
        response.getOutputStream().write(getBytes(csvWriter));
        response.flushBuffer();

        }
    public byte[] getBytes(final CSVWriter csvWriter) {
        final StringWriter stringWriter = threadLocal.get();
        return stringWriter.getBuffer().toString().getBytes();
    }

    public Writer getOutputWriter() {
        final StringWriter writer = new StringWriter();
        threadLocal.set(writer);
        return writer;
    }

没有观察到错误。

【问题讨论】:

  • 什么是getWriter()?您需要关闭编写器或流。
  • @user207421 我在任何地方都看不到 getWriter()。
  • 我的错误,我的意思是getOutputWriter()。它在哪里?它有什么作用?

标签: java csv spring-mvc hybris opencsv


【解决方案1】:

像这样将csvWriter 写入OutputStream 后,您必须关闭它 -

    ....
    ....
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition", "attachment; filename=\"" + "Report.csv" + "\"");
    response.getOutputStream().write(getBytes(csvWriter));
    csvWriter.close();
    response.flushBuffer();  

您的 CSV 文件内容未写入 OutputStream,因为您在将其写入 OutputStream 之前将其关闭。尝试更改关闭csvWriter 的顺序。

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 2018-02-18
    • 1970-01-01
    • 2011-01-25
    • 2021-01-03
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多