JSP: рекомендации по загрузке файлов на сервер

Я загружаю файлы с использованием многостраничной формы, Apache FileUpload и т.д. Это нормально работает.

Но я хочу знать, какие лучшие практики или общие практики при сохранении файлов на сервере, в соответствии со следующим:

  • Именование файлов на сервере (то есть: какое имя лучше? Сгенерирован UUID или идентификатор строки, сгенерированный таблицей db при вставке файлов, связанных с данными)
  • Лучшее место для файлов внутри сервера (что лучше? i.e. В Linux-сервере, какую папку или раздел я должен использовать. Должен ли я шифровать загруженные файлы?)
  • Когда я помещаю ссылку для доступа к файлам из браузера: лучше ли прямой доступ или использовать сервлет?

Ответы

Ответ 1

  • Если вы делаете это так (файлы в файловой системе, метаданные в БД), тогда идентификатор строки для имени файла - неплохая идея (по крайней мере, она обеспечивает уникальность). К сожалению, вам нужно будет следить за тем, чтобы файловая система и база данных находились в синхронизации, поэтому потребуется тщательная кодировка.
  • Если вы хотите, файлы производительности могут храниться на отдельном жестком диске (или NAS). Обратите внимание: если количество файлов будет большим (тысячи), вы не должны поместить их все в одну папку, а вместо этого группируйте их в подпапки, каждая из которых содержит не более нескольких сотен файлов. Это обеспечит минимальное время доступа, если количество файлов станет большим. Использование шифрования должно зависеть от потребностей вашего бизнеса (хранить ли файлы конфиденциальные данные?).
  • Сервлет - лучший способ, поскольку он скрывает реальные данные хранилища от клиента, и это больше доказательств будущих изменений в приложении. Он также имеет некоторые другие преимущества (например, вы можете реализовать свой контроль доступа, вы получаете кеширование в браузерах/прокси из коробки и т.д.). И это необходимо, если вы используете шифрование.

Ответ 2

После постоянных проблем с действиями файловой системы сервера (отсутствующие разрешения, разные действия на разных платформах) я бы рекомендовал просто набивать файлы в виде BLOB в вашей базе данных. Таким образом, вам не нужно разрабатывать уникальные схемы именования файлов, и все конфиденциальные данные будут находиться в одном месте.

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