См. для справки этот набор данных: https://zenodo.org/record/2539424
Похоже, Zenodo дважды сжимает gzip-файлы без предварительного уведомления. Так что они "двойное сжатие" (!). Итак, когда вы загружаете их, они должны быть названы:
eswiki.wikilink_graph.2006-03-01.csv.gz.gz
самое запутанное заключается в том, что отображаемый MD5 относится к исходному файлу (сжатому один раз):
eswiki.wikilink_graph.2006-03-01.csv.gz
md5:2036a75ed53acdcc81f53061057fe343
так что это не соответствует файлу после его загрузки, но совпадает с исходным файлом (сжатым только один раз).
Вот что я получаю (я сохраняю загруженный файл как .gz.gz
):
$ md5sum eswiki.wikilink_graph.2006-03-01.csv.gz.gz
b32c3b896be22c32bb17b9fe887bda51 eswiki.wikilink_graph.2006-03-01.csv.gz.gz
$ gunzip eswiki.wikilink_graph.2006-03-01.csv.gz.gz
$ md5sum eswiki.wikilink_graph.2006-03-01.csv.gz
2036a75ed53acdcc81f53061057fe343 eswiki.wikilink_graph.2006-03-01.csv.gz
$ sha512sum eswiki.wikilink_graph.2006-03-01.csv.gz
56a48b0f82922fee20c07b0a2480bca1872c5e4aa8521a86e178dc00aea5dd2e4cda4ae05eb1b1950da7447dae70d47d8daa8d7a3c62d6989aaad09bd1fbcc71
eswiki.wikilink_graph.2006-03-01.csv.gz
$ zcat eswiki.wikilink_graph.2006-03-01.csv.gz | head -n10
page_id_from page_title_from page_id_to page_title_to
10 Argentina 3037 10 de enero
10 Argentina 3326 12 de octubre
10 Argentina 6301 13 de abril
10 Argentina 7874 1492
10 Argentina 6302 14 de abril
10 Argentina 14485 1502
10 Argentina 14471 1516
10 Argentina 14450 1536
10 Argentina 14434 1553
Как видите, загруженный файл не соответствует заданному MD5, и если вы один раз распакуете файл, то MD5 совпадет. После распаковки он также совпадает с суммами SHA512, которые я предоставляю отдельно в том же наборе данных в файле eswiki.wikilink_graph.sha512sums.txt
:
$ grep '2006-03-01' eswiki.wikilink_graph.sha512sums.txt
56a48b0f82922fee20c07b0a2480bca1872c5e4aa8521a86e178dc00aea5dd2e4cda4ae05eb1b1950da7447dae70d47d8daa8d7a3c62d6989aaad09bd1fbcc71
eswiki.wikilink_graph.2006-03-01.csv.gz
Это очень странно, потому что Zenodo не сжимает текстовые файлы (README и файлы хэш-сумм) и нигде не упоминается об этом поведении.
РЕДАКТИРОВАТЬ: Если вам интересно (поскольку все, о чем я говорил об этой проблеме, спрашивали), я уверен , что файлы, которые я загрузил, были сжаты только один раз, они у меня на диске, они все еще там, и они сжаты один раз .
Спасибо, что сообщили о проблеме.
Я воспроизвел проблему, связанную с заголовком Accept-Encoding: gzip
, который отправляет браузер.
$ curl -H "Accept-Encoding: gzip" -o eswiki.wikilink_graph.2006-03-01.csv.gz https://zenodo.org/record/2539424/files/eswiki.wikilink_graph.2006-03-01.csv.gz?download=1
$ md5sum eswiki.wikilink_graph.2006-03-01.csv.gz
b32c3b896be22c32bb17b9fe887bda51 eswiki.wikilink_graph.2006-03-01.csv.gz
против.
$ curl -o eswiki.wikilink_graph.2006-03-01.csv.gz https://zenodo.org/record/2539424/files/eswiki.wikilink_graph.2006-03-01.csv.gz?download=1
$ md5sum eswiki.wikilink_graph.2006-03-01.csv.gz
2036a75ed53acdcc81f53061057fe343 eswiki.wikilink_graph.2006-03-01.csv.gz
Я изучаю это дальше, но это либо связано с нашей конфигурацией NGINX, либо каким-то образом MIMEtype, доставляемый нашим сервером приложений.
Итак, я думаю, что понял, что происходит. Это сочетание ошибки приложения и неправильной настройки.
Тип MIME угадывается сервером приложений следующим образом:
>>> import mimetypes
>>> mimetypes.guess_type('eswiki.wikilink_graph.2006-03-01.csv.gz')
('text/csv', 'gzip')
Однако он использует только первую часть text/csv
(ошибка). В качестве меры безопасности (поскольку мы принимаем любой загруженный пользователем файл) MIME-тип дезинфицируется перед отправкой в браузер, в результате чего text/csv
преобразуется в text/plain
. Затем NGINX видит содержимое заголовка text/plain
, которое он настроен сжимать перед отправкой клиенту для экономии полосы пропускания (неправильная конфигурация).
Здорово! Дайте мне знать, если (и как) я могу помочь.
К сожалению, перенастройка NGINX не помогла решить проблему, поэтому ее исправление займет немного больше времени, так как нам также необходимо исправить ошибку в приложении. я