архивная запись в архиве: 404 для tgz с начальной точкой в ​​пути к архивному ресурсу - PullRequest
1 голос
/ 02 апреля 2020

Загрузка записи архива Системный сбой API для архива tar.gz

Можно загрузить весь архив https://jcr.mydomain/artifactory/osb-cmdb-builds/manual_report.tgz, но отдельные файлы https://jcr.mydomain/artifactory/osb-cmdb-builds/manual_report.tgz! / Osb-cmdb / build / reports / tests / test / index. html ошибка с сообщением Unable to find zip resource: 'osb-cmdb/build/reports/tests/test/index.html' using full URI '/artifactory/osb-cmdb-builds/manual_report.tgz!/osb-cmdb/build/reports/tests/test/index.html'

Однако обозреватель хранилища артефактов правильно отображает содержимое архива.

Это было воспроизведено с использованием docker image jfrog/artifactory-jcr версия: 7.3.2 и tar

$ tar --version
tar (GNU tar) 1.29
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"

Я что-то упустил? Исправлена ​​ли эта ошибка артефакта в более позднем выпуске?

Вот шаги по воспроизведению проблемы:

$ tar cvfz manual_report2.tgz ./osb-cmdb/build/reports/tests/test/index.html
$ tar tvfz manual_report2.tgz
-rw-r--r-- guillaume/guillaume 4193 2020-04-01 22:25 ./osb-cmdb/build/reports/tests/test/index.html

См. Скриншоты просмотр скриншота запись скачать скриншот

, а также образец tgz на диске Google, как предлагается в https://meta.stackexchange.com/questions/47689/how-can-i-attach-a-file-to-a-post

Обходной путь: используйте формат zip или tar вместо формата tar.gz.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Проблема связана с "." у вас в пути к файлу. Вы можете видеть точку как часть пути на скриншоте браузера дерева. Причина, по которой Artifactory не находит файл при попытке загрузки, заключается в том, что в пути отсутствует точка.
Хитрость в точке заключается в том, что она считается специальным символом, который переводится в текущий каталог. Если вы попытаетесь включить его в URL-адрес, используемый для загрузки файла, браузер удалит его.
Однако, используя кодировку URL-адреса, я смог загрузить файл с помощью cURL:

curl -vv "http://localhost:8081/artifactory/generic-local/manual_report2.tgz%21/%2E/osb-cmdb/build/reports/tests/test/index.html"

Следующее использование кодирования URL работает с Firefox:

http://localhost:8081/artifactory/generic-local/manual_report2.tgz!%2F./osb-cmdb/build/reports/tests/test/index.html
1 голос
/ 03 апреля 2020

(уточнение ответа @ dror-bereznitsky)

Избегать ведущего ./ в архиве tar.gz.

Если пути к архивам вычисляются динамически (например, результат find . -name "pattern"), затем вызовите команду tar с аргументом --transform='s|^\./||S', как предложено в https://unix.stackexchange.com/a/250186/381792

$ find . -name "index.html"
./osb-cmdb/build/reports/tests/test/index.html
$ tar cvfz manual_report2.tgz --transform='s|^\./||S' `find . -name "index.html"`
$ tar tvfz manual_report2.tgz
-rw-r--r-- guillaume/guillaume 4193 2020-04-01 22:25 osb-cmdb/build/reports/tests/test/index.html
...