在一个表格中上传35个文件


File upload for 35 files in one form

感谢您花时间阅读本文。我有一个有35个文件输入框的表单,作为CMS的一部分,我的客户可以上传他的每个产品的35张图片。分解为黑色7张,蓝色7张,灰色7张,红色7张,白色7张。所以他总共需要上传35张照片。此外,对于他上传的每个文件,需要制作一个较小的"缩略图"大小的图片。我有一个文件上传脚本,我经常使用它,当有一个文件要上传时,它的效果很好。我不确定如何在这个35个文件的情况下应用它。每个输入框都有一个唯一的名称(black1, black2…黑7,蓝1,蓝2……因此,从技术上讲,我可以使用每个文件输入框的唯一名称重复上传代码35次,但这显然是非常低效的。我希望这里有人能帮我想出更好的解决办法。

另一个要求是文件的名称存储在数据库中。所有黑色图片的文件名用字符串表示,以逗号分隔,存储在数据库的blackpics列中。将所有蓝色图片的文件名放入字符串中,以逗号分隔,并存储在数据库的bluepics列中。对于灰色、红色和白色的图片也是如此。

这是我现在上传一个文件的代码。它从输入框"file"中获取文件,检查它是否具有正确的扩展名(图像文件),检查文件大小,创建一个带有随机数和时间戳的随机文件名,创建一个缩略图(448px x 298px -大缩略图,我知道),检查上传的原始图像是否具有正确的尺寸(873px x 581px),如果一切正常,我最终将大文件保存在…/images/store/大/和拇指保存在../images/store/小/。它们都有相同的文件名,只是存储在不同的目录中。临时文件被删除,如果有任何错误,文件被删除。正如我所说,这对于一个文件非常有效。

所以我需要做的是修改代码,让它为输入框"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");
         }
 ?>

在body中我有文件上传字段so…

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

等表示灰色、红色和白色。

就像我说的,如果有人能帮助我,我将非常感激。如果你能一直看到这里,再次感谢你花时间看完这些

首先,不要为图像使用尺寸。尺寸并不能说明图像的大小。在网站上显示图片的关键是尺寸,而不是尺寸。

第二,为什么不使用多部分上传表单?在这里看到的。然后你的客户可以选择图像的颜色,并上传他们与一个选择,这将减少点击从35到7。或者如果您相信您的客户更精通技术:只使用一个输入字段,并指示他以特定的方式命名他的文件。例如"b_[文件名]"。[扩展]"黑色图像"。然后使用您喜欢的字符串搜索方法—例如RegEx—来识别图像