У нас есть приложение на основе браузера, которое объединяет сервер webdav. Мы генерируем URL-адреса для определенных документов на нашем (webdav) сервлете. (https://server.com/webdav/path/to/file.doc)
То, что мы ищем, - это хороший способ для наших клиентов открывать эти ссылки прямо в соответствующей программе. I.E. для пользователя Windows "https://server.com/webdav/path/to/excelfile.xls" должен открываться в MS Excel, а та же ссылка должна открывать OOCalc в Linux.
До сих пор мы использовали небольшой апплет, который отображает расширения, ОС и программы и открывает программу через Runtime.getRuntime().exec(..). Этот подход работает в некоторой степени нормально в Ms-Windows, но проблематичен для клиентов Linux и Mac, а также является довольно негибким.
Есть ли лучший способ сделать это?




Разве не для этого был разработан класс java.awt.Desktop?
Я говорю «Создан для», потому что есть много вещей, которые он не выполняет хорошо или неправильно, но он действительно работает для некоторых вещей. Отсутствует опция «открыть с помощью», например, операционная система должна запрашивать у вас, с чем вы должны открыть документ, если для этого ничего не зарегистрировано.
Он может интерпретировать URL-адрес как веб-адрес, открыть браузер, а затем браузер может делегировать открытие файла? в этом случае вам нужно будет загрузить документ во временный файл, а затем использовать desktop.open?
Java.awt.Desktop, к сожалению, не помог. это вызывает исключения в апплете из-за того, что «файл» не найден. также я бы сомневался, что он откроет правильную программу, учитывая использование WebDav. HTTP (S). Файл temp также не является вариантом, потому что это может помешать процессу сохранения (мы хотим, чтобы наши клиенты редактировали эти документы «напрямую» на наших серверах).
Если вы установите для MIME-типов файлов правильный формат, все браузеры смогут их обрабатывать. Затем пользователь может выбрать действие по умолчанию для этого типа (открыть acrobat, word, excel, блокнот) или выбрать другое.
К сожалению, апплет - пока единственное решение. Но в редких случаях мы используем плагины "SharePoint.OpenDocuments" и 'application/x-sharepoint'. Можете сравнить со своим решением здесь.
В наши дни он отлично работает в Internet Explorer 10/11. Но вам нужно будет добавить раздел реестра, чтобы позволить Office открывать документы, переданные из браузера, для чтения и записи. Ключ реестра выглядит следующим образом:
Office 2013:
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Internet\OpenDocumentsReadWriteWhileBrowsing = 0x1 (DWORD)
Office 2010:
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet\OpenDocumentsReadWriteWhileBrowsing = 0x1 (DWORD)
См. Эту статью для получения информации о настройке ключа: http://social.technet.microsoft.com/Forums/office/en-US/06fedd90-4889-45ca-949d-60b76d74dd15/ms-word-open-document-readonly-with-WebDAV
интересно услышать, знаете ли вы, что это кроссбраузер? (в наши дни большинство пользователей работают с Chrome)
@pvgoddijn Из коробки нет. то есть Firefox загружается на локальный диск, а затем отключает его, поэтому офис даже не видит URL-адрес WEBDAV. Однако если вы настроите локальный URI, аналогичный SharePoint Designer, он будет работать со всеми браузерами.
спасибо за информацию (однако это не вариант, потому что мы не можем разрешить сохранение этих документов во временной папке из-за проблем с безопасностью). Это может быть полезно для других, хотя
Может быть полезен javascript, найденный в моем ответе на этот вопрос stackoverflow.com/questions/6792960/…, вместе с комментарием к нему. По сути, клиент решает, что делать с файлом. К сожалению, я не могу вам помочь в вопросах Linux / Mac.