загрузка записи архива артефакта: 404 для tgz с начальной точкой в ​​пути к заархивированному ресурсу

Архив Artifactory запись загрузки 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'

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

Это было воспроизведено с использованием образа докера 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 ответа

Проблема связана с "." у вас есть путь к файлу. Вы можете увидеть точку как часть пути на скриншоте браузера дерева. Причина, по которой 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

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

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

Если пути к архивам вычисляются динамически (например, результат find . -name "pattern") затем вызовите команду tar с помощью --transform='s|^\./||S'аргумент, предложенный в /questions/24340167/sobstvennyie-kollektsii-vse-esche-stoit-dopolnitelnoj-rabotyi/24340187#24340187

$ 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
Другие вопросы по тегам