我没有学习如何使用 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 然后删除吗?或者我的问题有更好的解决方案吗?我会以完全错误的方式解决这个问题吗?