чтение файла из внешнего контейнера webapp в groovy

#groovy #web-applications

#groovy #веб-приложения

Вопрос:

Привет, я пытаюсь прочитать XML-файл извне контейнера веб-приложения, он отлично работает, когда XML-файл находится в каталоге внутри контейнера веб-приложения, но не работает, когда я пытаюсь получить к нему доступ из каталога вне веб-приложения. На самом деле я успешно записываю XML-файл до того, как попытаюсь его прочитать, в любое подходящее место на диске. Я пробовал такие пути, как c:/xmls/my1.xml, /myprojhome/xmls/my1.xml но только /myprjhome/js/my1.xml работает, поскольку каталог js находится внутри web-ap.

Я просто пытаюсь получить доступ, жестко указав путь в коде прямо сейчас, например map.setDataURL(«/myprjhome/js/my1.xml «); — это работает, но другие не работают, они выдают ошибку данных — не удается найти файл

Это система Windows, над которой я сейчас работаю, нужно ли мне устанавливать URL для карты каким-либо другим способом? (например. используя file.seperator)

Я использую Fusion Maps — инструмент картографирования на основе flash, который принимает данные в формате xml, поэтому я импортирую файл javascript, который является FusionMaps.js и в нем есть все функции, такие как setDataURL. Я делаю это в javascript для отображения диаграммы :

           <script> 
var  map = new FusionMaps("/gra/swf/Maps/FCMap_World.swf", "Map1Id", "750", "400", "0", "0"); 
     map.SetDataURL(URL of the dataxml);
         </script>
  

На диаграмме отображается карта, только если URL-адрес действителен, в противном случае отображается ошибка недопустимого URL-адреса, я попытался использовать файловый протокол (File:///c:/cmls/mtxml.xml ) но это не работает. Это из-за модели безопасности Flash sandbox, не разрешающей доступ к ресурсам за пределами домена swf-файла? поскольку вы можете видеть, что swf-файл расположен по какому-то другому пути .. (этот путь находится в веб-приложении ..)

Комментарии:

1. Вы имеете в виду, что хотите, чтобы люди могли щелкнуть ссылку и загрузить XML-файл извне веб-приложения? Или это попытка загрузить файл изнутри контроллера или чего-то еще на сервере?

2. Я просто пытаюсь получить к нему внутренний доступ, загрузить XML-файл в контроллер, прямо сейчас путь, который я указываю, должен быть допустимым URL, как я могу указать путь, подобный «C:/xmls/myxml.xml «или в Unix подобном»/usr/documents/…/myxml.xml «, прямо сейчас это работает, только если путь, добавленный к URL-адресу приложения, становится допустимым местоположением URL в системе, нужно ли мне указывать в качестве URL-адреса like file:\ c:/ …?

3. что такое ‘map’? Я вижу, что вы видите вызов ‘setDataURL’ для него, но в вашем вопросе не хватает этой части информации…

4. добавлена информация в исходный вопрос. спасибо ..!

Ответ №1:

Итак, после нашего обсуждения в комментариях мы, наконец, выяснили причину ваших проблем.

Вы делаете это на Javascript, поэтому он находится на стороне клиента. Клиентский компьютер не может видеть произвольный путь на вашем компьютере (можете ли вы представить последствия, если бы это было возможно?)

У вас есть 2 варианта:

  1. Поместите xml в свое веб-приложение (вы знаете, что это работает)
  2. Напишите сервер, который будет возвращать xml из произвольной папки при выполнении.

Подойдет # 1, если у вас нет очень веских причин для # 2

Комментарии:

1. ну да… Я думаю, что сейчас нам не нужен второй вариант, большое спасибо за вашу помощь в устранении этой проблемы..

2. Здесь нужна небольшая помощь. В моем случае XML-файл будет периодически записываться сервером на основе изменений в значениях базы данных, я не могу поместить свой XML-файл внутри веб-приложения, так как же мне написать сервер для возврата моего XML?

3. @shyamnathan когда вы получаете запрос на файл, открываете программу чтения для файла, отправляете данные в ответ и закрываете программу чтения?