读取nginx

时间:2018-08-10 03:59:48

标签: java csv nginx opencsv

我正在使用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提供的代码,它可以正常工作,并且将BufferedReader与外部CSV一起使用的测试未显示任何标头,只是csv值。

这就是为什么我也考虑这可能是nginx问题,因为我最近还遇到了文件下载未完成的错误,因此我不得不将以前可以正常工作的keepalive_timeout 65更改为{{1 }}。我不确定为什么突然发生这种情况。

1 个答案:

答案 0 :(得分:0)

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

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