读取 nginx 提供的 CSV 时出错



我正在使用com.opencsv.CSVReader从我的nginx Web服务器提供的URL中读取CSV。CSV 文件内容正是这样的:

0.999,1.399,1.799,2.199,2.599,2.999,3.399,3.799,4.199,4.599,4.999,5.399

问题是当我读取文件时,我没有得到 csv 值:

try (InputStreamReader in = new InputStreamReader(new URL(...csv).openStream(), "UTF-8"); CSVReader r = new CSVReader(in)) {
List<String[]> csv = r.readAll();
....

在此之后,csv 无法获取数据(但没有引发任何错误(,并且csv.get(0).length被错误地1,一个空字符串。我不知道为什么。我为隔离问题所做的测试:

  • 我尝试通过 http 和 https 从我的 nginx 获取文件,结果类似。我必须说,这段代码不久前工作正常,现在没有明显的原因,它失败了。
  • 在阅读 csv 之前,我使用了一个BufferedReader来查看in中的内容,我得到了:

    Date: Fri, 10 Aug 2018 03:11:13 GMT
    Content-Type: text/plain
    Content-Length: 71
    Last-Modified: Wed, 12 Jul 2017 16:23:24 GMT
    Connection: keep-alive
    ETag: "..."
    Strict-Transport-Security: max-age=31536000
    X-Frame-Options: DENY
    X-Content-Type-Options: nosniff
    X-XSS-Protection: 1; mode=block
    Accept-Ranges: bytes
    0.999,1.399,1.799,2.199,2.599,2.999,3.399,3.799,4.199,4.599,4.999,5.399
    

    所以我不确定标题是否也被 csv 阅读器读取并以某种方式弄乱了它。

  • 我使用相同的代码来访问外部 CSV,而不是我的 nginx 提供的 CSV,它工作正常,并且使用带有外部 CSV 的BufferedReader进行测试没有显示任何标头,只有 csv 值。

这就是为什么我也在考虑这可能是一个nginx问题,因为我最近也遇到了文件未完成下载的错误,我不得不更改我以前的keepalive_timeout 65,该工作正常以keepalive_timeout 0。我不知道为什么会突然发生这种情况。

这很难调试,但解决方案是重新安装nginx,因为我的副本已损坏。我的nginx实例发送了额外的r字符,这些字符不会干扰curl或类似内容,但会破坏Java实现。

顺便说一句 - 这可能突出了.openStream()实现中的一个错误。

相关内容

  • 没有找到相关文章

最新更新