Структура файла изображения и кодировка имени файла.как Facebook изображение URL - PullRequest
2 голосов
/ 05 декабря 2010

Мне интересно, какова лучшая структура папок для веб-приложения для сохранения изображений пользователей, если у них разные имена пользователей и разные альбомы. Я использую Amazon S3, папки и корзины

Я не хочу, чтобы люди могли предсказать URL для пользователей / альбомов, таких как FB

http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs1189.snc/154140_10150322456245277_731310276_15908482_4918209_n.jpg

Также для имени файла. Какой самый лучший тип информации для кодирования, чтобы изменить имя файла. (имя пользователя, дата / время, идентификатор пользователя) Э.Г.

Оригинал: apple.jpg

закодированные: 1263547483_56783929_3934736_943883.jpg

Что бы вы использовали для кодирования этих безопасных имен файлов Url? Base64, MessageDigests?

Ответы [ 2 ]

1 голос
/ 05 декабря 2010

Кодирование с ex Base64 кажется плохой идеей. Я просто заменил бы имя файла на GUID и имел бы карту в базе данных, которая сопоставила файл и GUID вместе.

Что-то вроде:

http://photos.site.com/{account-id}/{gallery-id}/{image-guid}.jpg

Что приведет к:

http://photos.site.com/23323/323/F66A80B2_007F_11E0_86C8_322ADFD72085.jpg
1 голос
/ 05 декабря 2010

Я бы создал "случайное" имя файла.Файлы могут быть сохранены либо в одном каталоге, либо в структуре сгенерированных каталогов, например dir01, dir02, dir03.Отдельные каталоги лучше подходят для действительно большого количества файлов.Я думаю, что вы не должны хранить более 10K файлов в одном каталоге.Если у вас есть больше файлов, создайте новый каталог каждый раз, когда счетчик прибывает в 10K.

Все метаданные файлов, включая физический путь в файловой системе, должны храниться в БД.Таблица файлов может содержать внешний ключ к таблице пользователей, поэтому вы всегда можете узнать владельца файла.

Этот дизайн является масштабируемым: в будущем вы можете хранить разные каталоги на отдельных дисках или даже использовать систему CDN.Это достаточно безопасно.Невозможно угадать, как вы кодируете метаданные файла в имя файла, потому что вы ничего не кодируете: вы просто создаете случайное имя.Это просто и мощно.Все данные находятся в БД, поэтому вы можете добавлять новые функции в будущем и запускать их на старых данных в БД.

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