Встроенные предпросмотры PDF

Попробовал это: установил cors origins в значение https://xxxxx.s3.us-east-2.amazonaws.com, а также добавил DISCOURSE_ENABLE_CORS: true в файл /var/discourse/containers/app.yml, но это не работает.

1 лайк

А вы выполнили команду ./launcher rebuild app после внесения изменений в app.yml? Возможно, вам также потребуется выполнить полную перезагрузку страницы в браузере.

2 лайка

Кстати, проверьте раздел «Файлы» в настройках администратора — возможно, вы изменили параметры, влияющие на эту функцию. Также, полагаю, что эта функция не будет работать, если вы ссылаетесь на PDF-файл, размещённый на другом сервере. Я только что протестировал это на своём сайте: тот же PDF-файл, размещённый удалённо, не показал предпросмотр.

Сообщите, если обнаружите источник проблемы!

Пример разметки поста, где удалённая ссылка не сработала, а загруженный локально файл — сработал.

remote: 

[test remote pdf](https://jsoncompare.org/LearningContainer/SampleFiles/PDF/sample-pdf-with-images.pdf)

uploaded locally: 

[sample-pdf-with-images.pdf|attachment](upload://uOJLgHidEXnbqPRn2p6yP10ecQU.pdf) (3.8 MB)

Как это выглядит:

3 лайка

Да, но это не помогло.

Когда вы включаете S3 в Discourse


то по определению файлы хранятся на другом домене.
Думаю, это проясняет проблему. Но я всё ещё надеюсь, что плагин можно будет адаптировать для поддержки установок Discourse с включённым S3.

2 лайка

Я не очень хорошо знаком с этой конфигурацией. Вы следовали этим инструкциям?

1 лайк

Да, у меня S3 (и связанная настройка «secure media») работает уже несколько лет без проблем.
Не работает только компонент Inline PDF с этой настройкой.

Для справки: даже настройка app.yml таким образом:

DISCOURSE_ENABLE_CORS: true
DISCOURSE_CORS_ORIGIN: ‘*’

не помогает

2 лайка

Я тоже столкнулся с этой же проблемой и в итоге отказался от загрузки в S3, чтобы заставить этот TC работать, так как он для нас очень важен:

Действительно считаю, что поскольку это official и загрузка в S3 поощряется, стоит разобраться, можно ли заставить это работать с S3 каким-то образом. Возможно, PDF-файлы специально исключены из загрузки в S3, но это было бы очень неудобно, так как некоторые из них огромного размера!

6 лайков

Думаю, никто не станет с этим спорить.
Скорее всего, дело в осведомлённости и приоритетах.
Что касается «осведомлённости», то, возможно, @Johani, автор темы, мог бы добавить небольшую заметку в тему обсуждения о том, что компонент встроенного PDF не работает при включённой поддержке S3.
Это сэкономило бы время другим пользователям на устранение неполадок и повысило бы осведомлённость о проблеме.

3 лайка

В этих постах, которые я выловил из авто-таймера, есть немного информации об S3, если это поможет?

7 лайков

Пост был объединён с существующей темой: Проект тем-компонентов

Да, это работает :smiley:
Для справки, если кому-то ещё это понадобится:

  1. Перейдите в консоль AWS, раздел Buckets, по ссылке https://s3.console.aws.amazon.com/s3/buckets и выберите бакет, использовавшийся для установки Discourse.

  2. Перейдите на вкладку Permissions.
    image

  3. Прокрутите вниз до раздела “Cross-origin resource sharing (CORS)” и вставьте:

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "https://my-site.com"
        ],
        "ExposeHeaders": []
    }
]

Это должно выглядеть так:

11 лайков

Жаль, что я не нашел этого, пока еще работал с загрузками в S3!

Возможно, придется вернуться к этому сейчас. @JammyDodger, интересно, стоит ли упомянуть об этом и в теме про S3, и в этом исходном посте, чтобы другие не наступили на те же грабли.

5 лайков

Абсолютно верно. :+1: Я просто ждал подтверждения, что это сработало, прежде чем подумать о том, как лучше внести правку. :slightly_smiling_face:

7 лайков

Две идеи, решающие одну и ту же проблему: область просмотра обсуждения довольно узкая, поэтому большинство PDF-файлов слишком малы для чтения внутри страницы. Чтобы решить это, мы могли бы:

a) сделать PDF-iframe изменяемым по размеру? Я уже пробовал это сделать с помощью CSS, но безрезультатно — лежащая в основе сетка, похоже, мешает.
b) добавить вторую ссылку «открыть в новой вкладке» рядом со ссылкой на скачивание? Я очень не хочу скачивать слишком много файлов с нашего форума.

5 лайков

Это было бы значительным улучшением! И, думаю, добавить это не должно составить большого труда. Если у меня найдётся время в ближайшие дни, я, возможно, попробую сделать pull request для этого.

4 лайка

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

Вариант (a) может быть сложным, учитывая, как трудно добиться правильного отображения элементов в публикации.

3 лайка

Я был бы рад увидеть кнопку разворачивания

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

3 лайка

@Ralf_Stockmann и @Alon1, вы пробовали…

Также на моём Discourse я использую этот метод…

Вставка PDF из Google Drive

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

  1. Поделиться
  2. Скопировать ссылку для обмена
  3. Открыть ссылку для обмена в новой вкладке
  4. Нажмите на три вертикальные точки в правом верхнем углу
  5. Выберите «Встроить элемент»
  6. Скопируйте отображаемый код iFrame
  7. Вставьте его в редактор Discourse

Ниже встроен тестовый PDF-файл из Google Drive, который вы можете << скачать здесь >>

<iframe src="https://drive.google.com/file/d/1KQ-jn7R0NmZxw955QaPu3lvLFh5zpnDe/preview" width="640" height="480" allow="autoplay"></iframe>

Вот как это выглядит… (что вы также можете проверить в реальном времени ЗДЕСЬ на моём сайте)

3 лайка

Отлично!
Просто (1) установите компонент темы IFrame Lightboxes и (2) добавьте URL вашего сайта в список «доменов origin iframe» в настройках компонента — и всё работает! Кнопка разворачивания появляется прямо над правым верхним углом встроенного PDF-файла.

Работает сразу из коробки :slight_smile:

4 лайка

Так как я всё ещё не мог открывать PDF-файлы в новой вкладке, я написал небольшой плагин, который обслуживает все локальные PDF-файлы с заголовком content-disposition: inline:

4 лайка