2016-05-24 106 views
1

嗨,我是亞馬遜的新手,對文件的處理方法很少。我試圖將縮略圖上傳到存儲區中。我可以上傳本地主機中的一個圖像,但我不能把它上傳在bucket.I可以在原始圖像上傳到桶中,這裏是我的代碼如何將縮略圖文件上傳到亞馬遜s3存儲桶?

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

我的原始文件上傳成功,但我收到以下錯誤在上傳縮略圖時,

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. 

有人可以幫我嗎?在此先感謝...

回答

3

試試這個: 這是爲我工作

<?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> 
+0

我得到這個錯誤使用$ this,而不是在/ Applications /在線74上的XAMPP/xamppfiles/htdocs/image_thumbnail_creation_php/index.php @kelvin kantaria – Anu

+0

我解決了這個錯誤。我在類文件中使用api比我使用$ this。你刪除$這也包括S3類文件 –

+0

它的工作...驚人謝謝@kelvin kantaria – Anu

1

嘗試此設置正確的路徑在哪裏上傳縮略圖在您的服務器根目錄。

$upload_img = Upload('image','uploads/','',TRUE,'uploads/thumbs/','200','160'); 
    $upload_img1 = Upload('image','products/','',TRUE,'products/','200','160'); 
    // Absoulte path where to upload thumnail 
    //$fileTempName12 = $_FILES[$upload_img1]['tmp_name']; comment this line 
    //$fileName12 = 'products/'.$_FILES[$upload_img1]['name']; 
    //full path of the thumbnail image 
    $thumb_src = 'products/'.$upload_img1; 
    $s3->putBucket("bucketname", S3::ACL_PUBLIC_READ); 

    if ($s3->putObjectFile($upload_img1, "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>"; 
    } 
+0

我嘗試這樣做收到此錯誤注意:未定義的變量:putObjectFile在/Applications/XAMPP/xamppfiles/htdocs/image_thumbnail_creation_php/S3.php上第187行 – Anu

+0

thumnail在s3存儲區中上傳了哪些內容?請分享S3.php文件代碼。 – user5200704

+0

我已經包含在問題中,請參考它。 @ user5200704 – Anu