java - Firefox 不会将此文件下载为 CSV

标签 java servlets csv

我已经尝试了所有我能想到的。我已经更改了 100 次 mime 类型。更改标题 400 次。我已经通过堆栈查看了十几次。这在 Chrome 中运行良好。当我在 Firefox 中下载时,它认为这是一个 xlsx 文件或二进制文件。它甚至以 xlsx 格式打开,但它认为它不是 csv,因此列没有分开。如果我保存文件(而不是直接点击打开),它甚至不会打开扩展名。我什至还没有到 IE,所以这让我有点担心。

    mime mapping
   <mime-mapping>
        <extension>csv</extension>
        <mime-type>application/vnd.ms-excel</mime-type>
    </mime-mapping> 

我已经尝试过 text/csv、application/csv、application/binary、application/octet-stream。

public void doDownloadFile() {

            PrintWriter out = null;

            try {

                String fileName = selectedPkgLine.getShortname() + ".csv";

                HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
                HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

                response.setHeader("Pragma", "public");
                response.setHeader("Expires", "0");
                response.setContentType(request.getServletContext().getMimeType(fileName));
                response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
                response.setHeader("Content-disposition", "attachment; filename=" + fileName + "");
                response.setHeader("Content-Transfer-Encoding", "binary");

                out = response.getWriter();
                CSVWriter writer = new CSVWriter(out);

                List<PkgLoad> pkgLoadList = pkgLoadService.findBetweenDates(selectedPkgLine, startDate, endDate);

                List<String[]> stringList = new ArrayList<String[]>();
                stringList.clear();

                String[] header = {
                    "pkg_load_id",
                    "time_stamp",
                    "ounces",
                    "revolutions",
                    "wrap_spec_id",
                    "pkg_line_id"
                };

                stringList.add(header);

                for (PkgLoad pkgLoad : pkgLoadList) {

                    String[] string = {
                        pkgLoad.getPkgLoadId().toString(),
                        pkgLoad.getTimeStamp().toString(),
                        pkgLoad.getOunces().toString(),
                        pkgLoad.getRevolutions().toString(),
                        pkgLoad.getWrapSpecId().getWrapSpecId().toString(),
                        pkgLoad.getPkgLineId().getPkgLineId().toString()
                    };
                    stringList.add(string);
                }

                response.setHeader("Content-length", String.valueOf(stringList.size()));


                writer.writeAll(stringList);
                out.flush();

            } catch (IOException ex) {
                Logger.getLogger(ViewLines.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                out.close();
            }
        }

感谢您的帮助。

Safari、Opera 和 Chrome 运行良好。没试过 IE。

****编辑****

好吧,这一直都是间距问题。我的文件名为“file name.csv”,这适用于除 firefox 以外的所有浏览器。当我将我的文件名命名为“filename.csv,没有空格时,它下载了它。我没有注意到它在下载时只下载了空格之前的名称的第一部分。祝你好运!

最佳答案

我在 PHP 中遇到了同样的问题,发现为文件名添加双引号可以解决问题。

 response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + \"");

关于java - Firefox 不会将此文件下载为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5156076/

相关文章:

python - 将数据从 .csv 文件转换为 .json - Python

javascript - 逗号分隔的字符串

java - 无法查看 fragment 内接收的短信

java - 使用 "item1.item1A"等键访问 map 中的深层对象

java - “找不到符号”或“无法解析符号”错误是什么意思?

java - 如何使用 requestFacade 包装器读取 org.apache.catalina.connector.request InputStream 两次?

java - 如何在另一个生成字节码类中使用匿名类实例

java - netbeans 7.2.1 中没有用于映射上下文监听器的 web.xml 文件

java.lang.NoClassDefFoundError : javax/servlet/http/HttpServletRequest 错误

java - 解析 CSV 文件以给出 Java 范围内的值