在多文件上载项目中重命名图像以与所选图像的数量相对应

时间:2015-05-27 00:16:55

标签: php html5 session file-upload session-variables

我正在处理有关多个文件上传的一些问题。我的项目处理用户输入保存到数据库的多个图像的表单,但首先将图像临时存储在目录中以显示各种预览。在我的班级处理图像的上传,我试图重命名图像,如下所示。

如果我一次上传一张图片,预览工作,每张图片都是唯一的,并带有唯一的名称。但是,如果我在选择图像时单击上传按钮并保持控制,即一次选择多个图像,它们都保存为相同的名称,预览的图像显示我选择的任何第一个图像的重复图像。

如何添加与该会话相对应的数字,例如' name-of-image-1.jpg' ,' name-of-image-2.jpg'等等?

protected function handle_file_upload($uploaded_file, $name, $size, $type, $error,$index = null, $content_range = null)     
{
    $file = new \stdClass();
    $file->name = $this->generate_unique_filename($name);   
    ... //more code
}


protected function generate_unique_filename($filename = "")
{

    $extension = "";
    if ( $filename != "" )
    {
        $extension = pathinfo($filename , PATHINFO_EXTENSION);

        if ( $extension != "" )
        {
            $extension = "." . $extension;
        }
    }
    $filename = getmypid() . '_'.time();

    return $filename;
}

1 个答案:

答案 0 :(得分:2)

在您上传文件的情况下,单个进程ID正在处理所有请求,因此每个图像都具有相同的名称,即相同(进程ID +时间)。

$ filename = getmypid()。 '_'。time(); (最好使用microtime())

您可以执行以下操作来重命名添加了连字符的文件(添加的数字将为0,1,2等)。

// HTML

<input name="upload[]" type="file" multiple="multiple" />

// PHP

for($i=0; $i<count($_FILES['upload']['name']); $i++) 

       {
          $tmpFilePath = $_FILES['upload']['tmp_name'][$i];

      if ($tmpFilePath != "")
        {

          $oldFile= $_FILES['upload']['name'][$i];
          $old_name=pathinfo($oldFile);
          $add_new_name = 'new-image-'.$i.'.'.$old_name['extension'];

/* or use   $add_new_name = microtime().'-'.$i.'.'.$old_name['extension'];*/

    if(move_uploaded_file($tmpFilePath, "./youruploadfolder/".$add_new_name))
  { 
       //rest of the code here

        }
      }
    }

将move_uploaded_file的第二个参数设置为您喜欢的内容(您的上传文件夹名称)。