Открывать PDF-файлы напрямую (не через загрузку) по умолчанию

В настоящее время основная обработка PDF-файлов осуществляется через загрузку:

allaboutcats.pdf (42.2 КБ)

Хотя это функционально, для наиболее частого сценария использования — «Я хочу прочитать это прямо сейчас» — особенно на мобильных устройствах, это добавляет несколько лишних шагов.

Необходимость загрузки или сохранения чего-либо является второстепенной. Это требуется иногда, но обычно пользователь просто хочет прочитать файл и продолжить работу.

Тема Inline PDF Previews решает эту проблему, предоставляя встроенный просмотр PDF на настольных компьютерах, и делает это блестяще. Однако она не охватывает следующие распространённые ситуации:

  1. PDF-файлы на мобильных устройствах
  2. Несколько PDF-файлов (из-за визуального шума)
  3. Просмотр PDF-файлов в отдельной вкладке браузера

Стоит отметить, что существуют и другие способы загрузки PDF-файлов. Их можно скачать по прямой ссылке (через правую кнопку мыши / контекстное меню) или из встроенного в браузер просмотрщика PDF, который предоставляет эта тема.

Предложение: по умолчанию открывать PDF-файлы в браузере

Это небольшое изменение изящно решает обе ситуации и просто использует стандартное поведение для других ссылок в Discourse. Таким образом, с предлагаемым изменением:

  1. Ссылки на PDF на мобильных устройствах обычно открываются в том же окне браузера
    — позволяет просматривать одним касанием
  2. Ссылки на PDF на настольных компьютерах (т. е. выше встроенного PDF) открываются в новой вкладке
    — это позволяет просматривать в полной вкладке одним кликом
  3. При намеренном отключении встроенного поведения (путём добавления пробела в тексте ссылки)
    — позволяет просматривать одним кликом

Я объединил всё это в этот PR:

4 лайка

Кто-нибудь из вашей команды, может быть, мог бы посмотреть этот PR @david?

Я оставил несколько комментариев по самому коду в PR

Когда я нажимаю на эту ссылку, PDF открывается в браузере. Загрузки не происходит. Вы видите что-то другое?

Я использую Chrome на macOS. Мы не используем этот компонент темы d-pdf-previews на Meta.

2 лайка

Здесь, на meta.discourse.org, моя ссылка выше открывается в той же вкладке, что и эта страница (точно так же, как вы описываете). В режиме safe-mode это не изменилось.

Однако на трёх моих недавно обновлённых сайтах (с отключённым TC) происходит попытка загрузки. Это также наблюдается в режиме safe-mode. Я не понимаю, почему так происходит. Я не вижу никаких настроек сайта, которые могли бы это регулировать.

Как бы то ни было, мой форк отлично решает эту проблему для моих сайтов!
Это для меня совершенно не имеет смысла!!

1 лайк

Я проверю, сможем ли мы исправить это несоответствие в ядре. Буду обновлять информацию здесь по мере продвижения.

2 лайка

Есть какие-то успехи на данный момент?

1 лайк

У нас есть версия в разработке. Надеемся, что сможем выпустить её в ближайшие пару недель. Это немного сложно, так как необходимо проверить множество различных сценариев (локальные загрузки, S3, совместимые с S3 решения, с CDN, без CDN и т. д.).

4 лайка

Только что проверил PDF-файл, который загрузил сегодня в тему на недавно обновлённом сайте: при клике на ссылку PDF он открывается в браузере по URL с CDN, на всякий случай.

2 лайка

Это должно быть исправлено с момента коммита SECURITY: Download allowlist for uploaded files · discourse/discourse@9c0642a · GitHub

Теперь у нас есть централизованная логика для определения, какие файлы должны отображаться «встроенно». Это означает, что PDF-файлы всегда отображаются встроенно, а некоторые менее безопасные типы файлов всегда предоставляются для загрузки. Эти изменения должны работать со всеми типами хранилищ для загрузки (локальное и S3, с CDN или без).

5 лайков

Эта тема была автоматически закрыта через 9 дней. Новые ответы больше не принимаются.

Дэвид, я только что протестировал это — и хотя на десктопе проблема, похоже, решена, на мобильном устройстве ситуация иная.

Когда я нажимаю на ссылку PDF на мобильном, начинается загрузка (а мне это не нужно). Мне нужно, чтобы файл открывался прямо в браузере (как на десктопе), независимо от того, установлен ли TC или нет.

Можете подробнее рассказать о вашей конфигурации (S3? CDN?) и операционной системе вашего мобильного устройства?

При нажатии на PDF в первом сообщении здесь на моём iPhone он открывается встроенно корректно.

1 лайк

А как насчёт файлов mp4? На большинстве сайтов ссылки на mp4-файлы автоматически воспроизводят их в браузере, но в Discourse этого не происходит, что довольно раздражает :slight_smile:

Пример: https://unicyclist.com/uploads/default/original/3X/4/f/4fb882b8ca5a0b0e3d75ff932506d57325f5582c.mp4

Ожидаемое поведение: https://d.canapin.dev/uploads/default/original/2X/4/4fb882b8ca5a0b0e3d75ff932506d57325f5582c.mp4

Теоретически mp4 должен отдаваться inline:

которое использует:

Как вам удалось этого добиться? То есть, в чём разница с unicyclist.com?

Извините, я должен был уточнить это различие. В последнем случае используется плагин: Discourse Video Inline

На Meta-форуме Discourse также принуждает к загрузке файлов mp4: http://d11a6trkgmumsb.cloudfront.net/original/4X/3/f/0/3f09f895d21cf0ae897d90c947abb816830b00a2.mp4

2 лайка

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

Вы что-то настроили для нас «простых самохостеров» (без CDN/S3)? Или это было какое-то глупое кэширование?

После исправления безопасности, о котором говорилось выше, изменений не было. Возможно, дело в кэшировании, особенно если вы впервые выполняли обновление через интерфейс. Если вы сейчас выполнили полную пересборку, это должно было сбросить кэш NGINX. Рад слышать, что теперь всё работает!

Я создал новую тему по проблеме с mp4:

3 лайка

Эта тема была автоматически закрыта через 3 дня. Новые ответы больше не принимаются.