感谢您抽时间阅读。我有一个包含 35 个文件输入框的表单,作为 CMS 的一部分,我的客户可以上传每个产品的 35 张图片。细分为黑色版7张图片,蓝色7张图片,灰色7张图片,红色7张图片,白色版7张图片。所以他总共需要上传 35 张照片。此外,对于他上传的每个文件,都需要制作一个较小的“缩略图”大小的图片。我有一个文件上传脚本,我总是使用它工作得很好——当有一个文件要上传时。我不确定如何在这种情况下将其应用于 35 个文件。每个输入框都有一个唯一的名称(black1、black2...black7、blue1、blue2...blue7 等)所以,从技术上讲,我可以使用每个文件输入框的唯一名称重复上传代码 35 次来执行此操作,但这显然效率极低。我希望这里有人可以帮助我找到更好的解决方案。
另一个要求是将文件的名称存储在数据库中。黑色图片的所有文件名都应该放在一个字符串中,用逗号分隔,并存储在blackpics
数据库的列中。蓝色图片的所有文件名都应该放在一个字符串中,用逗号分隔,并存储在bluepics
数据库的列中。对于灰色、红色和白色的图片,依此类推。
这是我现在必须上传一个文件的代码。它从输入框“文件”获取文件,检查它是否具有正确的扩展名(图像文件),检查文件大小,创建一个带有随机数和时间戳的随机文件名,创建一个缩略图(448px x 298px - 大缩略图,我知道),检查上传的原始图像尺寸是否正确(873px x 581px),如果一切正常,我最终将大文件保存在 ../images/store/big/ 中并保存拇指在 ../images/store/small/. 它们都具有相同的文件名,只是存储在不同的目录中。临时文件被删除,所有这些,如果有任何错误,文件将被删除。正如我所说,这对一个文件很有用。
所以我需要做的是修改代码,以便它为输入框“black1”,“black2”...“black7”完成所有这些,然后将所有文件名保存到一个字符串中(black1.jpg,black2.jpg ,black3.jpg,black4.jpg,black5.jpg,black6.jpg,black7.jpg) 然后我可以将其存储在数据库的“blackpics”列中。蓝色、灰色、红色和白色也是如此。我不需要数据库部分的任何帮助。我在想我需要创建一个包含返回文件名的文件上传脚本的函数。然后调用该函数 35 次,每个输入框调用一次。但我可能是错的。
如果有人可以向我提供任何帮助,我将不胜感激。这是上传脚本的代码:
<?php
$filename = $_FILES["file"]["name"];
$file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
$file_ext = substr($filename, strripos($filename, '.')); // get file name
$filesize = $_FILES["file"]["size"];
$allowed_file_types = array('.jpg','.gif','.png', '.JPG');
if (in_array($file_ext,$allowed_file_types) && ($filesize < 1024000)) {
// rename file
$rand = rand(1,100000000);
$time = time();
$newfilename = $rand . $time . $file_ext;
if (file_exists("../images/store/big/" . $newfilename)) {
// file already exists error
$err[] = "You have already uploaded this file.";
} else {
move_uploaded_file($_FILES["file"]["tmp_name"], "../images/store/big/" . $newfilename);
$pathToImage = '../images/store/big/' . $newfilename;
$pathToThumb = '../images/store/small/' . $newfilename;
$last4 = substr($pathToImage, -4);
switch(strtolower($last4)) {
case '.jpeg':
$img = imagecreatefromjpeg($pathToImage);
break;
case '.jpg':
$img = imagecreatefromjpeg($pathToImage);
break;
case '.png':
$img = imagecreatefrompng($pathToImage);
break;
case '.gif':
$img = imagecreatefromgif($pathToImage);
break;
default:
exit('Unsupported type: '. $pathToImage);
}
$max_width = 448;
$max_height = 298;
// Get current dimensions
$old_width = imagesx($img);
$old_height = imagesy($img);
// Calculate the scaling we need to do to fit the image inside our frame
$scale = min($max_width/$old_width, $max_height/$old_height);
// Get the new dimensions
$new_width = ceil($scale*$old_width);
$new_height = ceil($scale*$old_height);
$tmp_img = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height);
switch(strtolower($last4)) {
case '.jpeg':
imagejpeg($tmp_img, $pathToThumb);
break;
case '.jpg':
imagejpeg($tmp_img, $pathToThumb);
break;
case '.png':
imagepng($tmp_img, $pathToThumb);
break;
case '.gif':
imagegif($tmp_img, $pathToThumb);
break;
default:
exit('Unsupported type: '. $pathToImage);
}
imagedestroy($tmp_img);
imagedestroy($img);
}
} elseif (empty($file_basename)) {
$err[] = "Select a file to upload";
} elseif ($filesize > 1024000) {
$err[] = "File size limit exceeded";
} else {
$err[] = "File type not allowed";
unlink($_FILES["file"]["tmp_name"]);
}
list($width, $height) = getimagesize("../images/store/big/$newfilename");
if ($width != "873" || $height != "581") {
$err[] = "File dimensions error";
unlink("../images/store/big/$newfilename");
unlink("../images/store/small/$newfilename");
}
?>
在正文中,我有文件上传字段......
<input type="file" name="black1" disabled="1">
<input type="file" name="black2" disabled="1">
...
<input type="file" name="black7" disabled="1">
<input type="file" name="blue1" disabled="1">
<input type="file" name="blue2" disabled="1">
...
<input type="file" name="blue7" disabled="1">
等等灰色,红色和白色。
就像我说的,如果有人可以帮助我,我将不胜感激。如果你一直到这里,再次感谢你花时间阅读所有这些。