Как организовать и манипулировать картинками в файловой системе? - PullRequest
4 голосов
/ 26 августа 2010

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

Чтобы немного уточнить вопрос.

  • Где должен находиться репозиторий, создать другой VD в IIS или в приложении VD, или где-нибудь за пределами IIS?
  • Как организовать файл патша, поместить их все в одну папку или создать подпапки. Если да, то как назвать все эти папки?
  • Как обрабатывать несколько размеров одного и того же изображения? где их найти?
  • Как синхронизировать папки и изображения с базой данных?
  • Что еще приходит в голову, и вы думаете, что это важно ..

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

Я ставлю такие вещи

  • Я сохранил изображения в папке IIS, потому что хранение их вне iis делает их невозможными для использования в Интернете из-за путей. Вы не можете использовать путь к файлу в сети, это должен быть виртуальный путь к файлу.

    http://images/1.jpg вместо C: \ images \ 1.jpg

  • в корне у меня была подпапка для каждого размера картинки

    корне- + 400x300 + 600x400 + 1024x768

  • Именованные изображения по идентификатору из базы данных. Если ImageID из базы данных - 45678909, имя картинки - 45678909.jpg, а ее местоположение -

    .

    VD \ образы \ 400x300 \ 45 \ 67 \ 89 \ 45678909.jpg

    VD \ образы \ 600x400 \ 45 \ 67 \ 89 \ 45678909.jpg

Я нарезал имя картинки два на два и создал подпапки. дело не в том, чтобы в папке было более 100 файлов. Это была хорошая идея или глупая? Как бы вы это организовали? Для человека эта организация с тоннами папок не проста в использовании.

  • Имя изображения с относительным путем, которое я сохранил в таблице базы данных с описанием, временем вставки и т. Д. Путь: 45 \ 67 \ 89 \ 45678909.jpg

Есть предложения или улучшения?

Спасибо:)

Ответы [ 2 ]

3 голосов
/ 26 августа 2010

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

С точки зрения синхронизации вам просто потребуется периодически запускаемый скрипт, который запрашивает базу данныхдля всех изображений, которые должны быть там, и удаляет лишнее.Если у вас недостаточно места на диске, то вам это не нужно.

Может прийти время, когда вам понадобятся изображения на другом сервере для лучшей масштабируемости.Единственное, что я могу сделать, это настроить поддомен для ваших изображений, например images.yourdomain.com.Даже если вы указываете его на один и тот же сервер, очень просто перенести ваши изображения на более быстрый файловый сервер, если вам потребуется.

1 голос
/ 26 августа 2010

1) Я не знаю ASP или IIS, поэтому я не могу вам здесь помочь. Я храню изображения на Amazon S3, но не знаю, относится ли это к вашему делу.

2) Попробуйте организовать фотографии по их модели, а затем по идентификатору. Таким образом, если изображения являются изображениями аватара пользователя, ваш путь будет выглядеть как аватары / ID / изображения.

3) Если вы создаете несколько изображений разных размеров, попробуйте назначить имя каждому размеру. Например, у вас есть «оригинальное» изображение, «миниатюра» (90x90) и «превью» (400 * 300). Таким образом, вы можете хранить разные размеры, такие как аватары / ID / image_SIZE или аватары / ID / SIZE / изображение.

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

Все эти пункты взяты из замечательного плагина PaperClip для Ruby on Rails. Взгляните на него, чтобы узнать, как хранить файлы и вложения.

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