Получить рут веб-приложения из Spring Controller - PullRequest
12 голосов
/ 14 января 2010

Я пытаюсь записать загруженный файл из нескольких частей в файловую систему. У меня есть каталог с именем audio, который находится в корне моего веб-приложения (не внутри WEB-INF, а рядом с ним, для публичного доступа, такого как css и javascript).

Я хочу записать загруженный файл в этот каталог, но не могу найти нужный мне путь. Я думал, что получение ServletContext () с использованием realPath () может сработать, но у меня нет ссылки на ServletContext через контроллер Spring. Спасибо за любую гепатит

@RequestMapping(value="/uploadSample")
public ModelAndView upload(HttpServletRequest request, HttpServletResponse response, @RequestParam("file") MultipartFile f) {

    if (f == null) {
        return new ModelAndView("upload", "msg", "The file is null.");
    }
    try {
        // I need to set AUDIO_PATH to <webAppRoot>/audio
        FileOutputStream file = new FileOutputStream(AUDIO_PATH + "/" + f.getOriginalFilename());
        file.write(f.getBytes());
        file.close();
    }
    catch (FileNotFoundException ex) {
        Logger.getLogger(SampleUploadController.class.getName()).log(Level.SEVERE, null, ex);
    }
    catch (IOException ex) {
            Logger.getLogger(SampleUploadController.class.getName()).log(Level.SEVERE, null, ex);
    }



   return new ModelAndView("upload", "msg", "File ( " + f.getOriginalFilename() + ") successfully uploaded.");
}

}

Ответы [ 3 ]

27 голосов
/ 14 января 2010

Чтобы получить ссылку на ServletContext, ваш класс может реализовать ServletContextAware

РЕДАКТИРОВАТЬ: ServletContext также доступен в контейнере веб-приложения под именем bean-компонента servletContext, поэтому вы можете внедрить его, как любой другой bean-компонент в Spring.

11 голосов
/ 14 января 2010

Я думал, что получаю ServletContext () тогда использование realPath () может работать, но я не имеет ссылки на ServletContext

Да, вы делаете. См. HttpServletRequest.getSession (). GetServletContext ()

0 голосов
/ 14 ноября 2016

Получение URL сервера с использованием ServletContext небезопасно в разных средах.

Было бы лучше получить URL из файла свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...