首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >高效快速的图片上传

高效快速的图片上传
EN

Stack Overflow用户
提问于 2014-12-12 12:01:06
回答 1查看 2K关注 0票数 1

我一直在尝试一个新的网站,允许会员上传一些内容和图片。我已经完成了html,php和mysql的代码(在google的帮助下),现在一切都可以工作了,但速度并不快。可能是我的代码效率低下,或者我的托管公司限制了上传速度……或者两者都有。我是一个开发网站的新手!

使用小于300KB的小尺寸图像不是问题,但一旦我使用6mb的图像,它可能需要长达5分钟的时间来上传图像,即使我正在减小上传之前的大小。我在没有插入数据库的情况下进行了测试,所以我知道是图像部分导致了问题。

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

代码html代码片段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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;}
        }
    } 
EN

回答 1

Stack Overflow用户

发布于 2014-12-26 12:42:10

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27443230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文