0

我没有学习如何使用 9Lessons教程在 PHP 中调整图像大小。我不想将这些调整大小的文件存储在带宽昂贵的 Web 服务器上,而是使用 S3 类将它们上传到我的 CDN,即 S3 上的存储桶。

这是我的代码(我已经删除了所有错误检查和文件处理,请不要评论它只能处理 JPEG 并且文件可以是任何给定大小等):

<?php

if($_FILES["file"]["name"]) {

    $filename = stripslashes($_FILES['file']['name']);
    $uploadedfile = $_FILES['file']['tmp_name'];
    $src = imagecreatefromjpeg($uploadedfile);

    list($width,$height)=getimagesize($uploadedfile);
    $newwidth=200;
    $newheight=($height/$width)*$newwidth;
    $tmp=imagecreatetruecolor($newwidth,$newheight);

    imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);

    $filename = "small/".time().'.'.trim($_FILES['file']['name']);

    if(imagejpeg($tmp,$filename,100)) {
        imagedestroy($src);
        imagedestroy($tmp);
    }

    require('/path/to/S3.php');  

    if (!defined('awsAccessKey')) define('awsAccessKey', '');  
    if (!defined('awsSecretKey')) define('awsSecretKey', '');  

    $s3 = new S3(awsAccessKey, awsSecretKey);

    $put = S3::putObject(
        S3::inputFile($tmp),
        "bucket",
        $uploadFilename,
        S3::ACL_PUBLIC_READ,
        array(),
        array(
            "Cache-Control" => "max-age=315360000",
            "Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years"))
        )
    );
    var_dump($put);
}

?>

当我运行这个脚本时,S3 类会拉出一个错误,指出它$tmp是资源而不是文件。我知道imagejpeg()创建文件是必需的,但此时我如何将其上传到 S3?我需要创建图像,将其存储在本地,将其上传到 S3 然后删除吗?或者我的问题有更好的解决方案吗?我会以完全错误的方式解决这个问题吗?

4

1 回答 1

1
$put = S3::putObject(
    S3::inputFile($filename), //<- Here changes $tmp for $filename
    "bucket",
    $uploadFilename,
    S3::ACL_PUBLIC_READ,
    array(),
    array(
        "Cache-Control" => "max-age=315360000",
        "Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years"))
    )
于 2012-09-03T20:06:02.830 回答