Прямая ссылка на изображение в общей папке

Ну так бы сразу и сказал. Тебе нужно расширить папку/файл по ссылке. Переходя по ней ты увидишь окно с содержимым и кнопку скачать. Т.е. требуется действие от пользователя, НО если добавить в конце пути (если не изменяет память)

?download

То получишь свой файл по прямой ссылке без паролей и явок. Т.е.wget https://tralala.com/blabla?download

2 ноября 2018 г. 13:44:20 GMT+01:00, AlerktroNik noreply@nextcloud.com пишет:

Я тоже как-то методом тыка нашел эту ссылку у себя и был рад, что она работает в Гугл таблицах (об этом я писал в первом посте).
Выглядит она вот так:
https://domain.com/s/b37j9Lxi9LkR4ft/download?path=%2F&files=000001.jpg

Только проблема в том, что wget ее не может скачать. Он качает файлик с названием “download?path” … да и бог бы с названием, так и размер у этого файлика явно не картинки. И сайт соответственно тоже не может его выкачать. Я поэтому эту тему и поднял.

Есть еще идеи?

Нашел статью для подключения:
https://docs.nextcloud.com/server/13/user_manual/files/access_webdav.html#creating-webdav-mounts-on-the-linux-command-line

Запускал монтирование от root. Был нюанс, что не хотел читать пароли из файла ~/.davfs2/secrets, но из другого файла /etc/davfs2/secrets все прочитал.
Потом несколько раз примонтировалось и все было видно, через несколько подключений туда сюда начал писать ошибку типо “сервер временно недоступен” именно сервер, а не ресурс, но с серваком все было в порядке. Попытался ребутнут сервак и сервак вобще помер, я так подозреваю не смог автоматом примонтировать точку WebDav, хотя очень странно, что сервак после ребута меня пытался принудительно загнать с режим обслуживания и требовал пароль рута.

Были еще нуансы в том, что как-то долго все показывается через WebDav, помню и на винде не сильно это радовало, и куча народа на это жаловались в инете.

В понедельник буду пробовать просто установить клиента nextcloud и включить синхронизацию, пусть просто выкачивает на себя, но надо будет поиграться с путями, чтобы картинки на сайте не дублировались при импорте товаров.

Все равно идеальным вариантом остается конечно просто вариант расшарить папку 1 раз и потом получать из нее файлы по прямым ссылкам и приэтом эти ссылки были предсказуемыми и менялось только имя файла.

Если у кого-то еще есть идеи, с радостью потестирую.

Странно, если я расшариваю ссылку то получаю ссылку вида https://YOURSERVER/index.php/s/XfHKow2bMRA7YiD.
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5
Я ошибся, нужно добавить /donwload, т.е. https://YOURSERVER/index.php/s/XfHKow2bMRA7YiD/download.
Вот так:

$ wget https://YOURSERVER/index.php/s/XfHKow2bMRA7YiD/download
--2018-11-02 19:53:09--  https://YOURSERVER/index.php/s/XfHKow2bMRA7YiD/download
Распознаётся YOURSERVER (YOURSERVER)... 95.95.95.95
Подключение к YOURSERVER (YOURSERVER)|95.95.95.95|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: 427885 (418K) [audio/mpeg]
Сохранение в каталог: ««download»».

download                  100%[===================================>] 417,86K  2,58MB/s    in 0,2s    

2018-11-02 19:53:11 (2,58 MB/s) - «download» сохранён [427885/427885]

$ ls -la | grep OST
$ ls -la | grep download
-rw-rw-r--  1 gas  gas  427885 Nov  2 19:53 download

Проблема в том что файл теперь назывется download, а не OST_Bumer_-_Dimon.mp3. Т.е. нужно использовать ключь -O имя файла.

А так md5 сходится:
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

$ md5sum download
8622f05c366adbbb03b28b0f00820667  download

wget https://YOURSERVER/index.php/s/XfHKow2bMRA7YiD/download

downloads это не проблема, проблема в том, что я немогу автоматически генерировать эти ссылки в гугл таблицах, потомучто линк не привязан ни к какой логике, просто случайная генирация символов, а я хотел привязать генерацию к артикулу товара и просто в папку класть картинки уже с нужным именем.

По поводу наконце /download может у тебя другая версия Nextcloud? Я в первом топе свою писал.
Еще у тебя в линке есть index.php, я делал красивые линки себе … можешь погуглить pretty links nextcloud.

Про pretty links я в курсе, но не особо нужен :slight_smile:

Вот еще такая идея:
Зачем тебе линки постоянно генерировать? Создай Х файлов, скажем 10. Расшарь и получи 10 линков на них. Теперь ты можешь менять содержимое каждого из 10 файлов, а линк останется прежним. Добавляй /download в конце и будет тебе счастье.

У меня сейчас NC 14.

Если ты вообще по хардкоркору хочешь, то нужно создать хук (или парсер бота) в mysql чтоб выплевывал эти линки для тебя, или ты можешь редактировать их в БД и получать любой результат.

Вообще не понятно что именно ты пытаешься решить, если твой NC часть бэкэнда то первое решение с паролями должно работать на ура. Если твой NC часть фронтэнда, то генерь линки заранее, а содержимое файлов меняй. Далее без игр с БД не обойтись.

ОБНОВЕЛНИЕ:
Я нашел что ты хочешь: расшариваешь папку по ссылке и потом все файлы в ней доступны по прямой ссылке, например для OST Dimon:

https://YOURSERVER/index.php/s/X6t2BKe6zcAiegs/download?path=/&files=OST_Bumer_-_Dimon.mp3

все остальные файлы можешь качать также, меняя только последнюю часть с именем файла. Если “Димон” будет в подпапке Audio, то ссылка станет

https://YOURSERVER/index.php/s/X6t2BKe6zcAiegs/download?path=/Audio&files=OST_Bumer_-_Dimon.mp3

Все верно именно это я и хочу. Третий раз говорю, что данную ссылку понимает только Гугл Таблица.
Ни в wget, ни модуль импорта в интернет-магазин на Opencart не могут загрузить картинку по этому линку, вот я и ищу альтернативу. Качается файлик большого размера и это не картинка, а что-то другое.

Попробуй выполнить у себя команду, может в 14 версии, что-то исправили:
wget https://YARSERVER/index.php/s/X6t2BKe6zcAiegs/download?path=/Audio&files=OST_Bumer_-_Dimon.mp3

Кстати этот линк отличается от моего немного:
https://domain.com/s/b37j9Lxi9LkR4ft/download?path=%2F&files=000001.jpg

Можешь показ откуда ты это линк получил? А то я сам на него один раз наткнулся и забыл откуда я его взял.

Короче это косяк wget-а. Он неправильно парсит запрос и скачивает всю папку целиком в zip архиве. Заключи запрос в кавычки и тогда будет тебе счастье

wget "https://YOURDOMAIN/index.php/s/Zc5tmqrp4GL3CBJ/download?path=/&files=vid-1505299662.1.jpg"

ссылки не отличаются, просто у тебя символы между path и files закодированы по другому.
Как ты обратил внимание на скриншоте имя файла не совсем приятное, но это проблема wget. Ссылку брал просто из шары (т.е. открыл расшаренную папку по ссылке в приватном окне):


Если вставить в браузер то картинка откроется на отлично по прямому пути.

1 Like

Да, действительно wget качает, но когда я обрамляю весь путь в кавычки и гугл таблицы и модуль импорта вообще перестает воспринимать путь как ссылку на картинку. Я вот подумал есть же спец символы типо слеша или коды символов, которые могли позволить обрамлять не всю ссылку в кавычки, а только эти спецсимволы ?=&%
Т. е. вместо ссылки
https://domain.com/s/b37j9Lxi9LkR4ft/download?path=%2F&files=000001.jpg
или ссылки с кавычками:
https://domain.com/s/b37j9Lxi9LkR4ft/download?path=%2F&files=000001.jpg
получить ссылку без спецсимволов, а точнее их точечным выделением, чтобы начало и конец ссылки не изменилось, т. е. остался виден протокол https и конец . jpg:
https://domain.com/s/b37j9Lxi9LkR4ft/download\?path\=\%2F\&amp\;files=000001.jpg

Только я не знаю как этого добиться.
Может ты подсказать сможешь?

Это уже не топик данного форума. Я не знаю хорошо гугл таблицы и как там экранировать символы не подскажу, но ссылка строится так:

  1. https://domain.com/s/b37j9Lxi9LkR4ft/ - постоянная часть ведет на расшаренные ресурс
  2. download - указание к действию, а не открытию списка файлов (как в браузере).
  3. ? - разделитель
  4. path=/ - указатель пути, в данном случае root, если есть подпапки, типа TEST, будет path=/TEST
  5. & - разделитель в твоих примерах закодирован вместе со слэшем как %2F&
  6. files=000001.jpg - конкретный ресурс/картинка.

В твоём конкретном примере пункту 1-5 являются постоянными, только 6ой менятеся и то заранее известен.

Попробуй поискать: https://duckduckgo.com/?q=url+decode+online, например ? будет %3F. Вообще говорят curl творит чудеса.

1 Like

Я не про гугл таблицы, я говорил про php, т. к. модуль, которым я пользуюсь написан на php.

Спасибо за помощь, завтра буду играться, чтоже не нравится php модулю и как ему скормить этот путь чтобы он не скачивал целый архив папки аналогично wget без использования ковычек.

https://domain.com/s/b37j9Lxi9LkR4ft/download скачает полный архив папки. Только без дополнительных параметров wget оставит имя файла download, так что переименуй его в files.zip и все, или открывай как архив напрямую.

Данный вариант не подходит, мне нужная прямая ссылка на картинку.

Поробовал закодировать & в %26 тоже не помогает
Вместо ссылки
https://domain.com/s/b37j9Lxi9LkR4ft/download?path=%2F&files=000001.jpg”
Получилась ссылка
https://domain.com/s/b37j9Lxi9LkR4ft/download?path=%2F%26files=000001.jpg
ERROR 404: Not Found

Продолжу искать дальше.

Как-то я занимался этой задачей.

Вот тут написано причина, почему NextCloud не позволит внешним сайтам ссылаться на свои файлы:


Исключение - для изображений, на которые (вернее на preview которых) ссылку ставить можно.

Я обходил это просто созданием ещё одного vhost на Apache, в котором просто указывал на data папку NextCloud’a.
Но тут надо понимать что делаешь, потому что в зависимости от ситуации можно словить security issues.

1 Like

Ну как мы выше выяснили ссылаться и качать картинки даже без preview ссылки можно, расшарив просто папку, хотя это я знал еще до того как открыл тему. Вопрос только как правильно ее скормить php модулю, чтобы не использовать кавычки в начале и конце ссылки.
wget без проблем качает ссылку, если ее запихнуть в кавычки.
Вчера попросил друга посмотреть как ее скормить php:

короче у меня все окк
через функцию file_get_contents(url) все получает правильно
ничего не экранировал

Теперь попросил его посмотреть сам модуль импорта, подозреваю, что там косяк.

Но за идею с vhost однозначно спасибо.

Вот не надо, NC позволяет вставлять картинки и все остальное на форумах. Играть с Apache и прямой ссылкой однозначно плохая идея.
Вот пример моего старого сообщения на форуме с ссылкой на картинку, которые прекрасно отображались:


Нужно просто ссылаться на скачивание, и браузер скачает и отобразит в тексте нужный контент.

Там не то написано, вы хотите ссылку на preview, а это совсем другое, нужно встаривать оригинальный контент вв виде ССЫЛКА/download

У меня появился вопрос ?
А почему после того как картинки залиты на Nextcloud не синхронизировать папку с ними на папку на другом серверы?
Виды синхронизации разные.

Об этом я уже писал 5 дней назад. Но пока руки не долши. И вариант далеко не универсальный, это хорошо что у меня личный сервак, а допустим мне нужно будет перехать на платный хостинг … не говоря уже о том, что привносит новые проблемы.

Друзья, большое спасибо всем за помощь, особенно gas85.

РЕШЕНО
Спустя несколько недель мне удалось пообщаться с разработчиком модуля импорта и он смог оперативно решить проблему.
Вот его ответ:

это было потому, что модуль не обнаруживал имя файла, отправленное next cloud, поэтому он давал каждому файлу одинаковое имя и перезапись.

Действительно наблюдались именно такие симптомы, т. е. бралась одна картинка рандомно и назначалась на все товары, на тот момент я не придал этому значения т. к. в превью картинок перед импортом было просто пустое поле с отсутствующими картинками и далеко не всем назначалась даже эта единственная картинка (возможно просто картинки отсутствовали в реальности на некоторых товарах просто).

Подведу итог:
Расшарить одну папку для публичного доступа, потом положить туда кучу картинок с заранее известными именами и после этого скачать их по прямой ссылке реально и все работает**!!! ЭТО БЫЛ ГЛЮК МОДУЛЯ ИНТЕРНЕТ-МАГАЗИНА!!!**

Вот пример ссылки и как ее получить:

Я вижу что проблема была в модуле для Opencart ну и хорошо что решилась проблема.