«Не разрешено загружать локальный ресурс: file: /// C: … jpg» Java EE Tomcat

Я пытаюсь получить изображение из своей файловой системы после хорошего хранилища (вместо того, чтобы поместить его в базу данных, я скопирую его на диск и поставлю путь к db)

  1. Я сохранил изображение в папке c: \ images \ и предположил, что имя полного пути: c: \ images \ mypic.jpg
  2. когда я пытаюсь получить его, установите атрибут img src в с помощью некоторого кода Java
  3. в консоли браузера я нашел эту ошибку Not allowed to load local resource: file:///C://images//mypic.jpg

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

отправка тега приведет к тому, что пользовательский браузер получит доступ к изображению из своей файловой системы. если вам нужно хранить изображения в папке, расположенной в c:\images я бы предложил создать сервлет вроде images.jsp, который в качестве параметра принимает имя файла, затем устанавливает содержимое ответа сервлета на изображение / jpg и затем загружает байты изображения из местоположения сервера и передать его в ответ.

Но что вы используете для создания своего приложения? это чистый сервлет? Весна? JSF?

Здесь вы можете найти информацию о том, как это сделать.

В Chrome вы должны разрешить эту возможность с флагом времени выполнения –allow-file-access-from-files

Тем не менее, похоже, что существует проблема с текущими версиями Chrome (37, 38), где это не работает, если вы также не передаете флаг времени выполнения –disable-web-security

Это неприемлемое решение, за исключением, возможно, краткосрочного обходного пути, но оно было идентифицировано как проблема: https://code.google.com/p/chromium/issues/detail?id=379206

У вас есть две альтернативы:

Сначала нужно создать ServletImageLoader, который будет принимать в качестве параметра идентификатор вашего изображения (путь изображения или hashа), который вы будете использовать внутри Servlet для обработки вашего изображения, и он будет печатать в stream ответов загруженный изображение с сервера.

Во-вторых, создать папку в папке ROOT вашего приложения и просто сохранить относительный путь к вашим изображениям.

Многие браузеры изменили свои политики безопасности, чтобы больше не разрешать чтение данных непосредственно из общих или общих ресурсов файлов. Вам нужно либо разместить файлы где-нибудь, чтобы ваш экземпляр tomcat мог их обслуживать, и поместил «обычный» http-url в созданный вами html. Это может быть достигнуто либо предоставлением сервлета, который считывает и предоставляет файл, помещающий файл в каталог, где tomcat будет обслуживать его как «статический» контент.

Концепция местоположения http и расположения диска отличается. Что вам нужно сделать:

  1. для загруженного файла summer.jpg
  2. переместите это под известным (в приложение) место на диск, например c:\images\summer.jpg
  3. вставить в запись db, представляющую изображение с текстом summer.jpg
  4. для его отображения используйте plain
  5. вам нужно что-то (например, apache), которое будет обслуживать c:\images\ под вашими приложениями /images . Если вы не можете сделать это, то в шаге 2 вам нужно сохранить где-то под вашим веб-корнем, например c:\my-applications\demo-app\build\images

Эта ошибка означает, что вы не можете напрямую загружать данные из файловой системы, потому что за этим стоят проблемы безопасности. Единственное решение, которое я знаю, это создание веб-службы для загрузки загрузочных файлов.

Вот простое решение expressjs если вы просто хотите запустить это приложение локально, и безопасность не вызывает беспокойства:

В server.js или app.js добавьте следующее:

 app.use('/local-files', express.static('/')); 

Это будет служить вашему ENTRE корневому каталогу в /local-files . Излишне говорить, что это действительно плохая идея, если вы планируете развернуть это приложение в любом месте, кроме вашей локальной машины.

Теперь вы можете просто сделать:

  

Примечание. Я запускаю macOS. Если вы используете Windows, вам, возможно, придется искать и удалять ‘C: \’ из строки пути

Не используйте ABSOLUTE PATH для обозначения имени изображения, например: C:/xamp/www/Archivos/images/templatemo_image_02_opt_20160401-1244.jpg . Вы должны использовать ссылку на свое местоположение в веб-сервере. Например, используя ../../Archivos/images/templatemo_image_02_opt_20160401-1244.jpg зависимости от того, где работает ваш процесс.

  • Выполнение хранимой процедуры SQL и обработка результатов
  • Основные данные - сохранение изображений (iPhone)
  • Как вы клонируете repository Git в определенную папку?
  • Как работает jQuery .data ()?
  • Как создать файл на внутреннем хранилище Android?
  • Получить URL-адрес загрузки из файла, загруженного с помощью облачных функций для Firebase
  • Хранилище типов данных типа C ++
  • Настройка Eclipse для использования подписанного хранилища ключей
  • Как вернуть пользовательский объект из запроса Spring JPA GROUP BY
  • Как создать хранилище ключей?
  • Interesting Posts

    Как размещать несколько страниц из разных доменов вместе?

    Как реализовать getfilter () с пользовательским адаптером, который расширяет базовый адаптер

    Использование jQuery .live с событием toggle

    Подавить OneNote, добавляя себя к элементам запуска

    Не удалось получить значение свойства margin из результата getComputedStyle

    Просмотр сгенерированного источника (после AJAX / JavaScript) в C #

    «Java DateFormat не является streamобезопасным», к чему это приводит?

    Удаление определенного URL-адреса в Chrome

    Как отключить кеширование на стороне клиента и прокси в ASP.NET MVC?

    Почему изменчивые структуры «злые»?

    Предотвратите удаление Excel скопированных данных для вставки после определенных операций без буфера обмена Office

    Общее использование диска для конкретного пользователя

    Получить имя активного пользователя в скрипте в Mac OS

    Добавление двух символов создает int

    Кто-нибудь знает хороший способ обхода нехватки enum generic constraint?

    Давайте будем гением компьютера.