高效快速的图像上传

时间:2014-12-12 12:01:06

标签: php file-upload upload

我一直在玩一个新网站,允许会员上传一些内容和图片。我已经把代码html,php& mysql(在google的帮助下)现在一切正常但速度不快。 可能是我的代码效率低下或我的托管公司限制了上传速度......或两者兼而有之。我是开发网站的新手!

使用小尺寸图像< 300kb不是问题,但是一旦我使用6mb图像,即使我在上传前减小尺寸,也可能需要花费5分钟来上传图像。我已经在没有数据库插入的情况下进行了测试,所以我知道导致问题的图像部分。

在我开始考虑实施DropBox来存储图像之前......有没有人遇到过这个问题之前可以推荐一种不同的方法?

代码html代码段:

<form name="add-form" action="includes/new_post.php" method="post" enctype="multipart/form-data">
    <input id='id_question_pic' name="upfile1[]" type="file" tabindex="3" multiple accept='image/*' max-uploads=6 />

php中的代码:

//put all the uploaded images into an array 
    $files=array();
    $fdata=$_FILES['upfile1'];
    for($i=0;$i<count($fdata['name']);++$i){
        $files[]=array(
         'name'    =>$fdata['name'][$i],
         'type'  => $fdata['type'][$i],
         'tmp_name'=>$fdata['tmp_name'][$i],
         'error' => $fdata['error'][$i], 
         'size'  => $fdata['size'][$i]  
        );
    }

     //move to the correct directory, with unique file names
     $directory = 'C:\Inetpub\vhosts\mydomain\form_uploads\\'; //use local server path (hosting company)
     $dbimagepath = 'form_uploads/';
     $result = true;
     foreach ($files as $file) {
        if ($file['error'] == 0) {
            $filename = $file['name'];
            if (strlen($filename) > 20) {$filename = substr($filename, strlen($filename) - 8);}
            $filename = mt_rand() . '_' . $filename;

            //ensure the filename is unique//
            while (@getimagesize($directory . $filename)){$filename = mt_rand() . $filename;}

            $fullpath = $directory . $filename;
            if (exif_imagetype($file['tmp_name'])== 2){
                $image = imagecreatefromstring(file_get_contents($file['tmp_name']));

                //ORIGINAL DIMENTIONS
                list( $width , $height ) = getimagesize($file['tmp_name']);

                //ORIGINAL SCALE
                $xscale=$width/600;
                $yscale=$height/600;

                //NEW DIMENSIONS WITH SAME SCALE
                if ($yscale > $xscale)
                {
                    $new_width = round($width * (1/$yscale));
                    $new_height = round($height * (1/$yscale));
                }
                else
                {
                    $new_width = round($width * (1/$xscale));
                    $new_height = round($height * (1/$xscale));
                }

                //NEW IMAGE RESOURCE
                if(!($imageResized = imagecreatetruecolor($new_width, $new_height)))
                {//error handling}

                //RESIZE IMAGE
                if(! imagecopyresampled($imageResized, $image , 0 , 0 , 0 , 0 , $new_width , $new_height , $width , $height))
                {//error handling}
                $image = $imageResized;


                $exif = exif_read_data($file['tmp_name']);
                if (!empty($exif['Orientation']) || !$exif['Orientation']===null){
                    switch($exif['Orientation'])
                    {
                        case 3: // 180 rotate left
                            $image=imagerotate($image, 180, -1);
                            break;
                        case 6: // 90 rotate right
                            $image=imagerotate($image, -90, -1);
                            break;
                        case 8:    // 90 rotate left
                            $image=imagerotate($image, 90, -1);
                            break;
                        default:
                            break;
                    }
                }

                if (imagejpeg($image, $fullpath, 80)){
                    //call function to update the database
                }

                imagedestroy($image);
            }
            else
            {$result = false;}
        }
    } 

1 个答案:

答案 0 :(得分:1)

了解为解决您的特定问题而构建的第三方解决方案。 例如Uploadcare

有了它,即使无法访问主机的文件系统,您也可以快速可靠地上传,上传速度仅受访问者的互联网连接限制。