在我的上传文件脚本中,我需要将上传的文件名(它们都是图片)更改为上传文件的用户的userId +其他一些内容。
我一切正常,但唯一的问题是当我使用move_uploaded_file
并在那里指定一个新文件名时,我得到一个带有新名称但没有扩展名的文件。
无需为扩展程序编写更多代码,我可以使用新名称和原始扩展名获取文件名吗?
我目前正在做:
$tempFile = $_FILES["file"]["tmp_name"];
$newName = 'userId'.time()
if(move_uploaded_file($tempFile,$root.'/images/'.$userId.'/'.$newName)) {
}
但以此结束...
这是相同的上传文件,但没有扩展名。如果我手动更改扩展名,我可以在那里看到图像。
答案 0 :(得分:0)
您需要做的是首先从原始文件名中提取原始扩展名,然后将其添加到$ newname变量中。
名称需要包含扩展名,没有办法解决,如果你知道扩展名将永远是什么,你就是cvan
答案 1 :(得分:0)
试试这个
$tempFile = $_FILES["file"]["tmp_name"];
$file = explode('.', $_FILES["file"]["tmp_name"]);
$newName = 'userId'.time().'.'.$file[count($file)-1];
if(move_uploaded_file($tempFile,$root.'/images/'.$userId.'/'.$newName)) {
}
答案 2 :(得分:0)
将您的代码更改为:
$tempFile = $_FILES["file"]["tmp_name"];
$newName = 'userId'.time() . "." . substr($_FILES['file']['name'], strpos('.'), strlen($_FILES['file']['name']));
if(move_uploaded_file($tempFile,$root.'/images/'.$userId.'/'.$newName)) {
}
答案 3 :(得分:0)
您使用$newName = 'userId'.time()
设置新文件名,为什么您对该名称感到惊讶?
要保留原始扩展名,首先需要找到它,然后将其添加到新文件名中。您可以使用Fileinfo PHP扩展来猜测文件扩展名:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $tempFile);
finfo_close($finfo);
// Set file extension & exif data, if any
$exif = array();
switch ($mimeType) {
case 'image/png':
$fileExtension = 'png';
break;
case 'image/gif':
$fileExtension = 'gif';
break;
case 'image/jpg':
case 'image/jpeg':
$fileExtension = 'jpg';
break;
}
然后,将扩展名添加到新名称:
$newName = 'userId' . time() . $fileExtension;