【问题标题】:How to download csv file without writing it using OpenCsv如何在不使用 OpenCsv 写入的情况下下载 csv 文件
【发布时间】:2013-10-22 06:18:25
【问题描述】:

我正在使用 OpenCsv API,现在我遇到了一些问题。这是我的代码

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        try {
            List<UserRegData> userRegDataList = new ArrayList<UserRegData>();
            HttpSession session = request.getSession();
            userRegDataList = (List<UserRegData>) session.getAttribute("referralData");
            List<String[]> dataToWrite = new ArrayList<String[]>();
            String csv = "E:\\carewave_backup\\csv\\UserReferral.csv";
            CSVWriter writer = new CSVWriter(new FileWriter(csv));

            for (UserRegData obj : userRegDataList) {
                dataToWrite.add(new String[]{obj.getReferred_by_name(), obj.getInvitee_name(), obj.getInvitee_email(), obj.getInvitee_date(), obj.getIsInviteeRegistered(), obj.getDate_of_invitee_registered()});
            }
            writer.writeAll(dataToWrite);
            writer.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            out.close();
        }
    }

这个 servlet 基本上从会话中检索列表并将其写入 csv 文件。这个 servlet 在用户单击下载 csv 按钮后被触发。现在我需要的是,浏览器应该给出一个下载对话框。无论如何以 csv 格式下载它不先将其写入文件?

【问题讨论】:

  • 为什么你认为你必须将它写入服务器上的文件?而不是writer.writeAll 将内容类型设置为text/csv 后直接将行写入响应。

标签: java servlets csv


【解决方案1】:

我假设您问的是如何将服务器上的输出直接流式传输到客户端,而无需先将其写入服务器上的临时文件。

您不需要先将数据写入文件。

  1. 将共振内容类型设置为text/csv
  2. 在响应对象上调用getOutputStream()
  3. dataToWrite 的内容作为单独的行写入输出流

不需要磁盘文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多