Как работать с файловой системой в Spring Boot?
=================================================

 Я нашёл несколько гайдов по этому поводу, но вот что меня волнует...  

  

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

  

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

  

Как отслеживать оставшееся место на диске? 

> Но потом, когда я загружу проект на сервер, то там же другая файловая система, другие директории и т.д. - как с этим быть?

  

Ну во-первых, как отметил коллега [Dmitry Roo](http://qna.habr.com/user/xez) нужно использовать относительные пути.  

Во-вторых, у вас должны быть несколько файлов конфигурации (с разными профилями). Например, для dev `upload.path` будет `/home/Desktop/uploads`, а для prod профиля будет `uploads/` и т.д.  

  

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

  

Обычно, делают проверку MIME type, как на клиентской стороне, так и на стороне сервера.  

  

Например, средствами js можно запретить загрузку других файлов, кроме `image/*` и т.д.  

Тоже самое делаю на сервере. Проверяют формат загруженного файла и если он не соответствует ожидаемому MIME type, то выбрасывают исключение и удаляют файл.  

  

> Как отслеживать оставшееся место на диске? 

  

Смотря, что подразумевается в данном случае. Если хостинг, то java.nio подойдет. А если это amazon s3 или другой сервис, то смотрите документацию к REST API. 

> Но потом, когда я загружу проект на сервер, то там же другая файловая система, другие директории и т.д.

  

Для этого придумали относительные пути, конфигурационные файлы, симлинки и т.д...  

  

> как быть с безопасностью?

 не давать пользователю загружать что попало. То что пользователь загрузил - никогда не запускать.  

  

> Как отслеживать оставшееся место на диске?

  

Java io  

Java nio