"Не разрешено загружать локальный ресурс: файл:///C:.... jpg" Java EE Tomcat
Я пытаюсь получить изображение из своей файловой системы после хорошего хранения (вместо того, чтобы помещать его в базу данных, я копирую его на диск, и я помещаю путь к db)
- Я сохранил изображение в папке c:\images\и предположил, что имя полного пути: c:\images\mypic.jpg
- когда я пытаюсь восстановить его, установите атрибут img src на
<img src="c:\images\mypic.jps">
с помощью некоторого java-кода
- в консоли браузера я нашел эту ошибку
Not allowed to load local resource: file:///C://images//mypic.jpg
Вопрос: как исправить эту проблему? где я должен хранить фотографии? и откуда я должен их получить?
Ответы
Ответ 1
тег отправки <img src="c:\images\mypic.jpg">
приведет к тому, что пользовательский браузер получит доступ к изображению из своей файловой системы.
если вам нужно сохранить изображения в папке, расположенной в c:\images
, я бы предложил создать сервлет вроде images.jsp, который в качестве параметра принимает имя файла, затем устанавливает содержимое ответа сервлета на изображение /jpg и затем загружает байты изображения из местоположения сервера и ответе его на ответ.
Но что вы используете для создания своего приложения? это чистый сервлет? Spring? JSF?
Здесь вы можете найти информацию о том, как это сделать.
Ответ 2
В Chrome вы должны разрешить эту возможность с флагом времени выполнения --allow-file-access-from-files
Однако похоже, что существует проблема с текущими версиями Chrome (37, 38), где это не работает, если вы также не передаете флаг времени выполнения --disable-web-security
Это неприемлемое решение, за исключением, возможно, как краткосрочного обходного пути, но оно было идентифицировано как проблема:
https://code.google.com/p/chromium/issues/detail?id=379206
Ответ 3
У вас есть две альтернативы:
Сначала нужно создать ServletImageLoader, который будет принимать в качестве параметра идентификатор вашего изображения (путь изображения или хэша), который вы будете использовать внутри Servlet для обработки вашего изображения, и он будет печатать ответ загрузите загруженное изображение с сервера.
Во-вторых, нужно создать папку внутри вашей папки ROOT приложения и просто сохранить относительный путь к вашим изображениям.
Ответ 4
Многие браузеры изменили свои политики безопасности, чтобы больше не разрешать чтение данных непосредственно из общих файлов или даже локальных ресурсов. Вам нужно либо разместить файлы где-нибудь, чтобы ваш экземпляр tomcat мог их обслуживать, и поместил "обычный" http-url в созданный вами html. Это может быть достигнуто либо предоставлением сервлета, который читает и предоставляет файл, помещающий файл в каталог, где tomcat будет обслуживать его как "статический" контент.
Ответ 5
Понятие местоположения http и места на диске отличается. Что вам нужно сделать:
- для загруженного файла
summer.jpg
- переместите это под известным (в приложение) место на диск, например
c:\images\summer.jpg
- вставить в запись db, представляющую изображение с текстом
summer.jpg
- чтобы отобразить его, используйте обычный
<img src="images/summer.jpg" />
- вам нужно что-то (например, apache), которое будет обслуживать
c:\images\
под вашим приложением /images
. Если вы не можете сделать это, то в шаге 2 вам нужно сохранить где-то под вашим веб-корнем, например c:\my-applications\demo-app\build\images
Ответ 6
Эта ошибка означает, что вы не можете напрямую загружать данные из файловой системы, потому что за этим стоят проблемы с безопасностью. Единственное решение, которое я знаю, это создание веб-службы для загрузки загрузочных файлов.
Ответ 7
Не используйте ABSOLUTE PATH для обозначения имени изображения, например: C:/xamp/www/Archivos/images/templatemo_image_02_opt_20160401-1244.jpg
. Вы должны использовать ссылку на свое местоположение в веб-сервере. Например, используя ../../Archivos/images/templatemo_image_02_opt_20160401-1244.jpg
в зависимости от того, где выполняется ваш процесс.
Ответ 8
Вот простое решение expressjs
, если вы просто хотите запустить это приложение локально, а безопасность не вызывает беспокойства:
В вашем файле server.js
или app.js
добавьте следующее:
app.use('/local-files', express.static('/'));
Это будет служить вашему корневому каталогу ENTIRE под /local-files
. Излишне говорить, что это действительно плохая идея, если вы планируете развертывать это приложение в любом месте, кроме вашей локальной машины.
Теперь вы можете просто:
<img src="/local-files/images/mypic.jps"/>
note: Я запускаю macOS. Если вы используете Windows, вам, возможно, придется искать и удалять "C: \" из строки пути