Я не нашел, как я могу получить файл из Uri.
blockquote>Нет файла.
ACTION_OPEN_DOCUMENT
иACTION_GET_CONTENT
не открывают файл. Они открывают документ. Этот документ может быть файлом. Возможно, это не так. ЭтоUri
может указывать на:
- Локальный файл на внешнем хранилище
- Локальный файл на внутренней памяти для другого приложения
- Локальный файл на съемном носителе
- Локальный файл, который зашифрован и нуждается в расшифровке на лету
- Поток байтов, хранящихся в столбце
BLOB
в базе данных- Часть содержимого, которое нужно загрузить другим приложением сначала
- ... и т. д.
Как я могу получить реальную путь к файлу?
blockquote>У вас нет.
Если вы хотите только принимать файлы, интегрируйте библиотеку выбора файлов вместо используя
ACTION_OPEN_DOCUMENT
илиACTION_GET_CONTENT
.Если вы используете
ACTION_GET_CONTENT
, а схемаUri
, которую вы получаете, этоfile
, тогдаgetPath()
будет файловым путем.В противном случае вам нужно понять, что вы не знаете, откуда документ выходит из , и перестать думать с точки зрения «реального пути к файлу». Используйте
ContentResolver
иopenInputStream()
илиDocumentFile.fromSingleUri()
или аналогичные методы для работы сUri
.
Я считаю, что это вызвано HSTS - см. http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
Если у вас (разработаны) любые другие локальные сайты, которые отправьте заголовок HSTS ...
, например. Строгая транспортная безопасность: max-age = 31536000; IncludeSubdomains; preload
... тогда, в зависимости от значения max-age, будущие запросы на localhost должны будут обслуживаться через HTTPS.
Чтобы обойти это, я сделал следующее.
Это не постоянное решение, но, по крайней мере, оно будет работать между проектами. Если кто-то знает, как навсегда исключить локальный хост из списка HSTS, пожалуйста, дайте мне знать:)
UPDATE - ноябрь 2017
Недавно Chrome переместил этот параметр, чтобы сидеть в разделе политики безопасности домена домена
ОБНОВЛЕНИЕ - декабрь 2017 Если вы используете домен .dev, см. другие ответы ниже, так как Chrome (и другие) заставляют HTTPS через предварительно загруженный HSTS.
Это не решение, это просто обходной путь.
Теперь он отлично работает как ссылка SSL
Я никогда не понял корень проблемы, однако я смог исправить эту проблему. Я удалил папку кэша приложений Google Chrome, которая решила проблему.
C: \ Users [users] \ AppData \ Local \ Google \ Chrome
Это может быть вызвано переадресацией https кэша и может быть исправлено путем очистки кеша вручную, как в ответе Адията Мубарака.
Но если вы посещаете локальный хост, вы, вероятно, разработчик, и в этом случае вы найдете расширение для очистки кеша, такое как «классический кеш-убийца» (см., например, https://chrome.google.com/webstore/search/classic%20cache%20killer?hl=ru ). в различных ситуациях, и, вероятно, уже установлен один.
Итак, быстрое исправление: установите кеш-убийцу (если у вас его еще нет), включите его и перезагрузите страницу. Готово!
Piggybacking off Adiyat Mubarak
Не удалось обновить, поскольку он просто обновлялся на https. Выполняется несколько шагов.
1. Open chrome developer tools (ctrl + shift + i)
2. Network Tab at the top
3. Click Disable cache checkbox at the top (right under network tab for me).
4. Refresh page (while the developer tools is still open)
Ответ @Adiyat Mubarak не помог мне. Когда я попытался очистить кеш и перезагрузить, страница все еще перенаправляется на https.
Мое решение: в верхнем правом углу строки url (слева от значка любимой звезды) есть значок с «x» через него. Щелкните правой кнопкой мыши на этом, и он скажет что-нибудь о «небезопасных сценариях», тогда есть возможность загрузить их в любом случае. Сделайте это.
Ни один из них не работал для меня. Это началось после обновления chrome (версия 63.0.3239.84, linux) с локальным URL-адресом. Всегда будет перенаправлять на https независимо от того, что. Потеряли несколько часов и много терпения в этом
. Что все-таки сработало, это просто изменение домена.
Для того, что стоит, домен был .app. Возможно, ему что-то нужно делать? И просто изменил его на .test и chrome остановил перенаправление его
Это самое быстрое решение сегодня (17-3-2018):
Закройте все вкладки / окна Chrome и запустите в командной строке: (или добавьте его как короткий код)
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors
Другим вариантом было бы использовать что-то вроде https://github.com/rchampourlier/tunnelss
. Конечно, он добавил другую зависимость / настройку, но также позволяет тестировать https в dev, что было бы неплохо.
Я использую RVM, однако для работы с туннелями мне пришлось использовать sudo gem install tunnelss
и sudo tunnelss
Я столкнулся с одной и той же проблемой, но только в Chrome Canary и поиске решения, которое я нашел в этом сообщении .
одна из следующих версий Chrome: чтобы все домены, заканчивающиеся на .dev (и .foo), перенаправлялись на HTTP через предварительно загруженный заголовок HTTP Strict Transport Security (HSTS).
blockquote>{ "name": "dev", "include_subdomains": true, "mode": "force-https" }, { "name": "foo", "include_subdomains": true, "mode": "force-https" },
Итак, измените свои домены .
Для тех, у кого была такая же проблема, я решил, нажав CTRL + SHIFT + DELETE, чтобы удалить только весь кеш браузера. Теперь я могу получить доступ к моему сайту localhost по протоколу HTTP.
Я также боролся с этой проблемой. Кажется, что HSTS предназначен только для доменных имен. Поэтому, если вы разрабатываете локальную машину, гораздо проще использовать IP-адрес. Поэтому я переключился с localhost на 127.0.0.1
Chrome 63 (с декабря 2017 года) заставит все домены, заканчивающиеся на .dev (и .foo), перенаправляться на HTTPS через предварительно загруженный заголовок HTTP Strict Transport Security (HSTS). Вы можете найти дополнительную информацию об этом здесь.
ленивое и быстрое решение для ленивых людей вроде меня (работает в Chrome 67).
Просто запустите другое окно Chrome в режиме невидимости, с опцией «Incognito Window» (CTRL + SHIFT + N). Нет необходимости удалять кеш, нет необходимости погружаться в глубокие настройки Chrome и т. Д.
НОВЫЕ РАЗРАБОТКИ! (если у вас есть Chrome 63 +)
Если ваш домен localhost .dev
, я не думаю, что ранее принятые и рабочие ответы больше не применяются. Это связано с тем, что Chrome Chrome Chrome будет принудительно деинсталлировать домены HTTPS через предварительно загруженные HSTS.
Что это значит, .dev
в принципе больше не будет работать, если у вас нет надлежащего подписанного SSL-сертификата - больше не разрешено самоподписанные сертификаты! Подробнее об этом сообщении в блоге.
Итак, чтобы исправить эту проблему сейчас и избежать этого в будущем .test
, это один рекомендуемый домен, поскольку он зарезервирован IETF для тестирования / dev. Вы также должны использовать .localhost
для локального разработчика.
из https://galaxyinternet.us/google-chrome-redirects-localhost-to-https-fix/
Ни одна из исправлений опции не работала для меня, для https://localhost:3000
.
нажмите и удерживайте кнопку Reload
и выберите Empty Cache and Hard Reload
, это кажется только опцией на localhost
Перейдите к настройкам в Chrome и затем к дополнительным настройкам, в разделе конфиденциальности и безопасности нажмите Очистить данные просмотра, а затем очистите все данные. Я последовал этим шагам, и это сработало для меня. Надеюсь, это поможет кому-то.
Chrome 63 заставляет .dev домены автоматически переходить на HTTPS через предварительно загруженный HSTS. Быстрое исправление: просто измените домены .dev на .localhost.