我正在处理有关多个文件上传的一些问题。我的项目处理用户输入保存到数据库的多个图像的表单,但首先将图像临时存储在目录中以显示各种预览。在我的班级处理图像的上传,我试图重命名图像,如下所示。
如果我一次上传一张图片,预览工作,每张图片都是唯一的,并带有唯一的名称。但是,如果我在选择图像时单击上传按钮并保持控制,即一次选择多个图像,它们都保存为相同的名称,预览的图像显示我选择的任何第一个图像的重复图像。
如何添加与该会话相对应的数字,例如' 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;
}
答案 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的第二个参数设置为您喜欢的内容(您的上传文件夹名称)。