0

感谢您抽时间阅读。我有一个包含 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">

等等灰色,红色和白色。

就像我说的,如果有人可以帮助我,我将不胜感激。如果你一直到这里,再次感谢你花时间阅读所有这些。

4

1 回答 1

1

首先不要对图像使用尺寸。尺寸并不能说明图像的大小。尺寸对于在网站上显示图像很重要,而不是尺寸。

其次,为什么不使用分段上传表单?见这里。然后您的客户可以按颜色选择图像并通过一个选择上传它们,这会将点击次数从 35 次减少到 7 次。或者,如果您相信您的客户更精通技术:仅使用一个输入字段并指示他以特定方式命名他的文件。就像黑色图像的“b_[文件名].[扩展名]”。然后使用您最喜欢的字符串搜索方法(例如 RegEx)来识别图像

于 2013-05-06T08:12:15.833 回答