Делается прозрачно, в один клик, но: • долго • теоретически браузер может заблокировать • если локально нет приложения-редактора, то ничего не посмотришь (на мобильных устройствах, например) • предпросмотр – удобно 3
Изучение кода 9 Подготовка предпросмотра Выбор конвертера на основе типа документа Конвертация WordConverter IDocumentConverter png, css Исходный документ Предпросмотр
rtf, odt Html одним файлом (картинки внутри как base64) Aspose.Words ExcelConverter xls, xlsx, xlsm, ods Html (frameset) Aspose.Cells PowerPointConverter ppt, pptx, odp Набор png Aspose.Slides Поддерживается постраничная конвертация. PdfConverter pdf Набор png Aspose.PDF Поддерживается постраничная конвертация. ImageDefaultConverter gif, jpeg, png gif, jpeg, png Сжатие картинки, если она превышает некоторый размер 10
конвертации. • Масштабировать нагрузку. • Безопасность. • Сделать отдельным сервисом, отделяемым (во всех смыслах) от основного приложения DirectumRX. 16
Сервер приложения DirectumRX Storage service Preview service (конвертация) Preview Storage service (хранение) GetDocument Document body Convert() Get description Description Get file file content Тела документов Ensure preview Файловое хранилище превью Save preview files Get description Description
Сервер приложения DirectumRX Storage service Preview service (конвертация) Preview Storage service (хранение) GetDocument Document body Convert() Get description Description 5 6 7 Get file file content Тела документов 8 Ensure preview Файловое хранилище превью 2 Save preview files Get description Description 1 3 4
таковых (в т. ч. в результате внешних факторов – потеря сети, отключение электричества). • Ситуация, когда в PreviewService ушло задание на превью, а тот просто завершился. • Таймаут на формирование превью. • Сконвертированное ранее выживает после перезапуска. 22
• Кем выдан • Кому выдан • Какая операция (read/write) • ID объекта (исходного документа) • Информация о подписи • Срок годности Request preview readToken Проверка прав доступа и генерация токенов Client Сервер приложения Preview service Preview cache service Get description и т.д. writeToken. Convert() GetDescription / GetFile readToken EnsurePreview writeToken Проверка writeToken Проверка writeToken Проверка readToken
но своё дело делает • Выкатываем на внутренний продакшен (для собственного использования внутри компании). • Решаем вскрывшиеся проблемы (в том числе напоролись на документы, которые Aspose не вывозит) 31
ConvertToPreview() Preview service ConvertToPreview() Preview Storage Файловое хранилище превью • Делаем, чтобы можно было несколько инстансов PreviewStorage 37
• Фронтэнд – другая команда (4 человека). ~3-4 спринта. • Всё работает как часики (в т. ч. в Linux) • Фича включена в релиз DirectumRX • Заявленные в начале цели достигнуты (мобилки, удобство, снизили нагрузку на сервер и т. д.) 39