上传命名约定

时间:2011-01-14 19:42:04

标签: php codeigniter logistics

我正在制作一项调查,用户可以上传大约6张图片。将这些存储在文件系统中的最佳方法是什么?用户可以进行多次调查(从而跟踪他们随时间的改进)......这意味着我不能只是按顺序命名......

这是一个CI / PHP应用程序。 :)

或者为了知识,你会怎么做?

5 个答案:

答案 0 :(得分:1)

哇,这有点开放......我想我可能会为每个用户构建一个目录,然后根据上传的日期时间命名图像。所以它看起来像这样:

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

但是,这可能不如您所愿。您可能希望使目录更深入,因此每个人每个日期都会获得一个目录,其中包含图像。

答案 1 :(得分:1)

将数据库中的所有这些映射到文件系统中存储它们的位置将是可搜索调查和用户的最佳结果。

// 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

答案 2 :(得分:0)

如果您按照“跟踪他们随时间推移的改进”的建议跟踪各个用户,那么我将从顶级目录开始。但是,即使这会导致目录膨胀,因为用户数量会增加。

在我编写的一个应用程序中,我必须为系统中的每个用户创建一个文件,我编写了一个例程(实际上是数据库端),将其唯一的ID分解为一组结构化的文件夹。

例如:用户12345上传#5可以存储在UPLOAD_DIR / 1/2/3/4/5 / upload_5.png

如果你想要一些不那么“可猜测”的东西,你仍然可以使用类似上面的东西,但不是只使用他们的id,你可以哈希它,但遵循类似的模式。

答案 3 :(得分:0)

考虑顺序编号:

user123_survey1_image6.jpg

用户的ID为123,这是用户的第六张图片,甚至更容易:

user123_survey56_image899.jpg

用户123的第六张图片恰好有ID 899

答案 4 :(得分:0)

另一种方法是使用uniqid()随机命名文件。您必须检查以确保当然不存在uniqid。这样的事情。

do {
    $filename = uniqid().'.jpg';
} while (file_exists('images/'.$filename));