Подтвердить что ты не робот

"Не разрешено загружать локальный ресурс: файл:///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

Вопрос: как исправить эту проблему? где я должен хранить фотографии? и откуда я должен их получить?

4b9b3361

Ответ 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: \" из строки пути