我学会了如何使用9Lessons tutorial在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然后删除?或者我的问题有更好的解决方案吗?我完全错误地采取了这种方式吗?
答案 0 :(得分: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"))
)