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

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

Например, средствами js можно запретить загрузку других файлов, кроме image/* и т.д.
Тоже самое делаю на сервере. Проверяют формат загруженного файла и если он не соответствует ожидаемому MIME type, то выбрасывают исключение и удаляют файл.

Как отслеживать оставшееся место на диске? 
Смотря, что подразумевается в данном случае. Если хостинг, то java.nio подойдет. А если это amazon s3 или другой сервис, то смотрите документацию к REST API.
Но потом, когда я загружу проект на сервер, то там же другая файловая система, другие директории и т.д.
Для этого придумали относительные пути, конфигурационные файлы, симлинки и т.д...

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

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