duanlan2003 2016-05-24 09:31
浏览 141
已采纳

如何将缩略图文件上传到亚马逊s3存储桶?

Hi I am new to amazon and have very little idea working with files.I am trying to upload a thumbnail image into bucket. I could upload a image in localhost but I could not upload it in bucket.I could upload the original image to the bucket, Here is my code

<?php
//include the S3 class
            if (!class_exists('S3'))require_once('S3.php');

            //AWS access info
            if (!defined('awsAccessKey')) define('awsAccessKey', '');
            if (!defined('awsSecretKey')) define('awsSecretKey', '');

            //instantiate the class
            $s3 = new S3(awsAccessKey, awsSecretKey);


function Upload($field_name = '', $target_folder = '', $file_name = '', $thumb = FALSE, $thumb_folder = '', $thumb_width = '', $thumb_height = ''){
    //folder path setup
    $target_path = $target_folder;
    $thumb_path = $thumb_folder;

    //file name setup
    $filename_err = explode(".",$_FILES[$field_name]['name']);
    $filename_err_count = count($filename_err);
    $file_ext = $filename_err[$filename_err_count-1];
    if($file_name != '')
    {
        $fileName = $file_name.'.'.$file_ext;
    }
    else
    {
        $fileName = $_FILES[$field_name]['name'];
    }

    //upload image path
    $upload_image = $target_path.basename($fileName);

    //upload image
    if(move_uploaded_file($_FILES[$field_name]['tmp_name'],$upload_image))
    {
        //thumbnail creation
        if($thumb == TRUE)
        {
            $thumbnail = $thumb_path.$fileName;
            list($width,$height) = getimagesize($upload_image);
            $thumb_create = imagecreatetruecolor($thumb_width,$thumb_height);
            switch($file_ext){
                case 'jpg':
                    $source = imagecreatefromjpeg($upload_image);
                    break;
                case 'jpeg':
                    $source = imagecreatefromjpeg($upload_image);
                    break;
                case 'png':
                    $source = imagecreatefrompng($upload_image);
                    break;
                case 'gif':
                    $source = imagecreatefromgif($upload_image);
                    break;
                default:
                    $source = imagecreatefromjpeg($upload_image);
            }
            imagecopyresized($thumb_create,$source,0,0,0,0,$thumb_width,$thumb_height,$width,$height);
            switch($file_ext){
                case 'jpg' || 'jpeg':
                    imagejpeg($thumb_create,$thumbnail,72);
                    break;
                case 'png':
                    imagepng($thumb_create,$thumbnail,50);
                    break;
                case 'gif':
                    imagegif($thumb_create,$thumbnail,50);
                    break;
                default:
                    imagejpeg($thumb_create,$thumbnail,50);
            }
        }

        return $fileName;
    }

}


if(!empty($_FILES['image']['name'])){

    $image_name = $_FILES['image']['name'];
        $tmp_name   = $_FILES['image']['tmp_name'];
        $size       = $_FILES['image']['size'];
        $type       = $_FILES['image']['type'];
        $error      = $_FILES['image']['error'];
    $target_dir = "products/";
    $target_file = $target_dir.$_FILES['image']['name'];
    $fileTempName = $_FILES['image']['tmp_name'];
    $fileName = $target_dir.$_FILES['image']['name'];

$s3->putBucket("bucketname", S3::ACL_PUBLIC_READ);

                //move the original file to bucket file
                if ($s3->putObjectFile($fileTempName, "bucketname", $fileName, S3::ACL_PUBLIC_READ)) {
                    echo "<strong>We successfully uploaded your file.</strong>";
                }else{
                    echo "<strong>Something went wrong while uploading your file... sorry.</strong>";
                }

    //call thumbnail creation function and store thumbnail name
    $upload_img = Upload('image','uploads/','',TRUE,'uploads/thumbs/','200','160');
    $upload_img1 = Upload('image','products/','',TRUE,'products/','200','160');

    $fileTempName12 = $_FILES[$upload_img1]['tmp_name'];
    //$fileName12 = 'products/'.$_FILES[$upload_img1]['name'];
    //full path of the thumbnail image
    $thumb_src = 'products/'.$upload_img1;
    $s3->putBucket("bucketname", S3::ACL_PUBLIC_READ);

                //move the thumbnail to bucket
                if ($s3->putObjectFile($fileTempName12, "bucketname", $thumb_src, S3::ACL_PUBLIC_READ)) {
                    echo "<strong>We successfully uploaded your file.</strong>";
                }else{
                    echo "<strong>Something went wrong while uploading your file... sorry.</strong>";
                }
    //set success and error messages
    $message = $upload_img?"<span style='color:#008000;'>Image thumbnail have been created successfully.</span>":"<span style='color:#F00000;'>Some error occurred, please try again.</span>";

}else{

    //if form is not submitted, below variable should be blank
    $thumb_src = '';
    $message = '';
}
?>
<?php
    // Get the contents of our bucket
    $contents = $s3->getBucket("bucketname");
    if(is_array($contents) || is_object($contents))
    {
    foreach ($contents as $file){

        $fname = $file['name'];
        $furl = "http://bucketname.s3.amazonaws.com/".$fname;

        //output a link to the file
        echo "<a href=\"$furl\">$fname</a><br />";
    }
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="post" enctype="multipart/form-data">
    <input type="file" name="image"/>
    <input type="submit" name="submit" value="Upload"/>
</form>
</body>
</html>

My original file is uploaded successfully but I am getting the following error on uploading the thumbnail image ,

Warning: S3::putBucket(): [BucketAlreadyOwnedByYou] Your previous request to create the named bucket succeeded and you already own it. in /Applications/XAMPP/xamppfiles/htdocs/image_thumbnail_creation_php/S3.php on line 188
We successfully uploaded your file.upload google.jpgupload1 
Notice: Undefined index: in /Applications/XAMPP/xamppfiles/htdocs/image_thumbnail_creation_php/index.php on line 130

Notice: Undefined variable: putObjectFile in /Applications/XAMPP/xamppfiles/htdocs/image_thumbnail_creation_php/S3.php on line 187

Warning: S3::putBucket(): [BucketAlreadyOwnedByYou] Your previous request to create the named bucket succeeded and you already own it. in /Applications/XAMPP/xamppfiles/htdocs/image_thumbnail_creation_php/S3.php on line 188

Warning: S3::inputFile(): Unable to open input file: in /Applications/XAMPP/xamppfiles/htdocs/image_thumbnail_creation_php/S3.php on line 224
Something went wrong while uploading your file... sorry.

Can someone help me? Thanks in advance...

  • 写回答

2条回答 默认 最新

  • duanbushi1867 2016-05-30 13:39
    关注

    try this : this is working for me

    <?php 
    // Bucket Name
    if(isset($_FILES['image']['name']))
    {
        $bucket="buket_name";
        if (!class_exists('S3'))require_once('S3.php');
        if (!defined('awsAccessKey')) define('awsAccessKey', 'your key');
        if (!defined('awsSecretKey')) define('awsSecretKey', 'your secret key');
        $s3 = new S3(awsAccessKey, awsSecretKey);
        $s3->putBucket($bucket, S3::ACL_PUBLIC_READ);
        function make_thumb($src, $dest, $desired_width,$extension)
        {
            $extension=strtolower($extension);  
            if($extension == 'jpeg' ||  $extension == 'jpg' )
            {
                $source_image = imagecreatefromjpeg($src);
            }
            if($extension == 'png')
            {
                $source_image = imagecreatefrompng($src);
            }
            if($extension == 'gif')
            {
                $source_image = imagecreatefromgif($src);
            }
            $width = imagesx($source_image);
            $height = imagesy($source_image);
            $desired_height = floor($height * ($desired_width / $width));
            $virtual_image = imagecreatetruecolor($desired_width, $desired_height);
            imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
            if($extension == 'jpeg' ||  $extension == 'jpg')
            {
                imagejpeg($virtual_image, $dest);
            }
            if($extension == 'png' )
            {
                imagepng($virtual_image, $dest);
            }
            if($extension == 'gif' )
            {
                imagegif($virtual_image, $dest);
            }
        }
    
        $files=$_FILES;
        $form_name="image";
        $thumb_tmp_path="uploads/tmp/";
        $upload_path="user/";//s3 buket folder
        $name=$files[$form_name]['name'];
        $i_array=explode(".",$name);
        $ext=end($i_array);
        $size=$files[$form_name]['size'];
        $tmp=$files[$form_name]['tmp_name'];
        $names=time().$name;
        make_thumb($tmp,$thumb_tmp_path."thumb/".$names,512,$ext);
        $s3->putObjectFile($thumb_tmp_path."thumb/".$names,$bucket,$upload_path."thumb/".$names,S3::ACL_PUBLIC_READ);
        unlink($thumb_tmp_path."thumb/".$names);
        //if you upload full image than you remove belove comment
        //$s3->putObjectFile($tmp,$bucket,$upload_path.$names,S3::ACL_PUBLIC_READ);  
        echo "<img src='".$s3file='http://'.$bucket.'.s3.amazonaws.com/'.$upload_path."thumb/".$names."'/>";
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
       <form method="post" action="" enctype="multipart/form-data">
        <input type="file" name="image">
        <input type="submit" value="upload">
       </form>
    </body>
    </html>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 爬虫爬取网站的一些信息
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错