Обходной путь для доступа к локальным файлам Html5

В настоящее время мы рассматриваем возможность переноса корпоративного приложения Silverlight на html5. Основное препятствие, с которым мы столкнулись, — это возможность открывать файлы с локального диска пользователя. В настоящее время у них есть библиотека документов, которая просто ссылается на файлы на их компьютере, которые они могут открывать из приложения и просматривать или распечатывать. Все, что я прочитал, это то, что вы можете получить доступ к локальной песочнице веб-приложения только с API-интерфейсом файла html5. Мы хотим загрузить эти файлы из кода.

Кто-нибудь знает какие-либо обходные пути для этого?

Спасибо


person Matt    schedule 30.01.2015    source источник
comment
Итак, чтобы уточнить, текущее приложение работает напрямую с файлом на локальной машине? Например, вы не пытаетесь загружать и работать с файлами на удаленном сервере или через API-вызовы на сервер в файле?   -  person JasCav    schedule 30.01.2015
comment
Привет JasCav, да работает с файлом на локальной машине. У них будет ссылка в приложении, например. c:\MyTxt.txt . Когда они нажимают «Печать» или «Открыть» (это очень простой пример, мы делаем с ним больше), он открывает документ, используя System.IO.FileStream.   -  person Matt    schedule 30.01.2015
comment
Итак, я не знаю, приведет ли это вас в правильном направлении, но у Спенсера Кули есть интересная запись в блоге, в которой рассказывается, как можно создать редактор изображений в браузере, не обращаясь к серверу. Это может быть похоже на то, что вы пытаетесь сделать. скотч. io/учебники/   -  person JasCav    schedule 30.01.2015
comment
вы можете найти односторонний хак, но лучше использовать что-то более формальное, например, node+webkit, cordova или даже HTA.   -  person dandavis    schedule 08.02.2015
comment
Я помню, что у меня была эта проблема давно, и я также помню, что я погуглил и нашел какой-то флэш-объект, который дал мне точку доступа к диску. Не прямая помощь, но попробуйте поискать это, может быть.   -  person jPO    schedule 08.02.2015


Ответы (5)


HTML5 не может получить доступ к локальному файлу без выбора пользователя. Но FSO: FileSystemObject работает для IE и MAYBE можно рассматривать как обходной путь. Но все же есть некоторые требования, которым нужно соответствовать.

person John Hua    schedule 06.02.2015

Можно использовать API файловой системы Chrome для доступа к файлам в локальной файловой системе пользователя. Таким образом, вы должны быть готовы сделать это приложение только для Chrome.

person markain    schedule 06.02.2015

Используя java, вы можете создать «подписанный» апплет, который имеет доступ к локальной файловой системе. (если апплет подписан, вы можете запросить разрешения файловой системы)

затем здесь есть руководство по доступу к методам вашего java-кода непосредственно из javascript: http://docs.oracle.com/javase/tutorial/deployment/applet/invokingAppletMethodsFromJavaScript.html

вы должны быть в состоянии выполнить что-то подобное из Silverlight.

person Damian Nikodem    schedule 09.02.2015

В чистом HTML5/Javascript нет обходного пути. Вам нужно использовать плагины, такие как Java или Silverlight (возможно, вам все-таки не стоит портировать). Что касается обходных путей, HTML5 дает вам простой способ перетаскивания нескольких файлов, которые вы можете передать на сервер, а затем отобразить обратно своим пользователям. Другим обходным путем может быть установка пользовательского агента (программного обеспечения только со значком в области уведомлений), который будет отправлять информацию о текущей пользовательской «библиотеке документов» на сервер, а затем снова отображать ее обратно пользователю.

Примечание. Я где-то слышал, что браузеры со временем перестанут поддерживать плагины. http://www.howtogeek.com/179213/why-browser-plug-ins-are-going-away-and-whats-replacing-them/

person Laurent Jalbert Simard    schedule 30.01.2015
comment
Да, именно поэтому мы сейчас рассматриваем миграцию, потому что chrome отказывается от поддержки npapi. Так что вариант плагина для него не сработает. - person Matt; 30.01.2015
comment
Если ваша кодовая база уже находится в .net, вы можете просто создать клиентское приложение с интерфейсом GUI и по-прежнему отправлять запросы на сервер. - person Laurent Jalbert Simard; 30.01.2015
comment
Это отбрасывает нас назад, во времена winforms/wpf, которые приносили нам кошмары развертывания. Для всего дерьма, которое получает Silverlight, это делает развертывание LOB намного проще. - person Matt; 30.01.2015
comment
Я согласен, это самое большое преимущество использования веб-приложений, их не нужно развертывать. Тем не менее, Microsoft внесла некоторые улучшения в ClickOnce, которые почти по умолчанию включают автоматическое обновление. - person Laurent Jalbert Simard; 30.01.2015
comment
Мы пошли по пути clickonce для нескольких вещей, но он никогда не казался таким простым, как развертывание SL. Но об этом можно говорить часами. Спасибо за ваш вклад. - person Matt; 30.01.2015

Да, я согласен с Маркейном. Однако, если бы вы ограничили свою аудиторию исключительно пользователями Chrome, я осмелюсь сказать, что вы, скорее всего, использовали бы некоторых из ваших пользователей. Если Huazhihao прав, то количество уходящих клиентов должно уменьшиться, но пользователи, которые регулярно используют firefox, будут недовольны. В общем, я думаю, что это не сработает. В противном случае было бы слишком много веб-сайтов, которые испортили ваш жесткий диск (или, по крайней мере, там, где у вас есть права на редактирование/удаление файлов). Я думаю, было бы лучше, если бы ваш продукт был настроен на синхронизацию файла при каждом обнаружении подключения к Интернету и внесении изменений в файл. Таким образом, пользователю не нужно будет посещать веб-сайт всякий раз, когда файл загружается. Если это какой-то файл ошибки, то было бы очень полезно, если бы вы сделали ссылку в приложении, при нажатии на которую файл загружался бы на веб-сайт, а веб-сайт делал все необходимое. Если это чисто интернет-вещь, то я не вижу, какое у вас дело было бы просматривать чужие файлы =-). Надеюсь, я помог!

person PMARINA    schedule 09.02.2015