Загрузить соглашение об именах - PullRequest
1 голос
/ 14 января 2011

Я создаю опрос, в котором пользователи могут загрузить около 6 фотографий.Что было бы для меня лучшим способом сохранить их в файловой системе?Пользователи могут проводить несколько опросов (таким образом, отслеживая их улучшение с течением времени) ... так что я не могу просто назвать их последовательно ...

Это приложение CI / PHP.:)

Или ради знаний, как бы ты это сделал?

Ответы [ 5 ]

1 голос
/ 14 января 2011

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

// Pseudo Database
// user table
user_id (pk)
user_name
user_filesystem_dir
...

// survey table
survey_id (pk)
survey_name
survey_filesystem_dir
...

// Image table
image_id (pk)
image_name
image_filesystem_dir
user_id_fk (this is the user_id from the user table)
survey_id_fk (this is the survey_id from the survey table)
...

// Find all the images for user id 123 and survey 456
SELECT * FROM image_table AS it, user_table AS ut, survey_table AS st
JOIN (it.user_id_fk = ut.user_id AND it.survey_id_fk = st.survey_id)
WHERE user_id_fk = 123
AND survey_id_fk = 456

// Pseudo Code
$user_id     = 123;
$survey_id   = 456;
$survey_name = 'Stack Survey #1';

$image_array = array(
    'image1.png',
    'image2.png',
    'image3.png',
    'image4.png',
    'image5.png',
    'image6.png'
);

// Folder Structure where User is most searched 
+-+123 <user_id>
  |
  +-467 <survey_id>
  | |
  | +-images
  |   |
  |   +-image1.jpg
  |   +-image2.jpg
  |   +-image3.jpg
  +-456 <survey_id>
    |
    +-images
      |
      +-image1.png
      +-image2.png
      +-image3.png
      +-image4.png
      +-image5.png
      +-image6.png

// Folder Structure where Survey is most searched 
+-+467 <survey_id>
| |
| +-123 <user_id>
|   |
|   +-images
|     |
|     +-image1.jpg
|     +-image2.jpg
|     +-image3.jpg
+-456 <survey_id>
    |
    +-123 <user_id>
      |
      +-images
        |
        +-image1.png
        +-image2.png
        +-image3.png
        +-image4.png
        +-image5.png
        +-image6.png
1 голос
/ 14 января 2011

Ничего себе, это своего рода открытый ... Я думаю, я бы, вероятно, структурировал каталог для каждого пользователя, затем назвал бы изображения, основываясь на дате и времени их загрузки. Так это будет выглядеть примерно так:

/+
 |
 +--+ Kyle
    |
    +-- 20110113114903.png
    |
    +-- 20110113115122.png
    |
    +-- 20110114010304.png
 +--+ Kevin
    |
    +-- 20101114123456.png
    |
    +-- 20110102023648.png
    |
    +-- ...

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

0 голосов
/ 14 января 2011

Одной из альтернатив может быть случайное присвоение имен вашим файлам с помощью uniqid ().Вы должны проверить, чтобы убедиться, что этот uniqid еще не существует, конечно.Как то так.

do {
    $filename = uniqid().'.jpg';
} while (file_exists('images/'.$filename));
0 голосов
/ 14 января 2011

Рассмотрим последовательную нумерацию:

user123_survey1_image6.jpg

Идентификатор пользователя 123, и это шестое изображение пользователя, или еще проще:

user123_survey56_image899.jpg

где пользовательШестое изображение 123 имеет идентификатор 899.

0 голосов
/ 14 января 2011

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

В одном приложении, которое я написал, где мне нужно было создать файл для каждого пользователя в системе, я написал подпрограмму (на самом деле на стороне базы данных), которая разбивала их уникальный идентификатор на структурированный набор папок.

Например: пользователь 12345 для загрузки № 5 может быть сохранен в UPLOAD_DIR / 1/2/3/4/5 / upload_5.png

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

...