我正在尝试使用PHP处理它到AWS后上传图像。当我尝试上传已在我服务器上的文件夹中的图像时,图像上传没有任何问题。但是,将相同的脚本添加到处理上传图像的脚本中(可以在本地保存图像,创建裁剪版本并将链接上传到本地数据库),调整大小并在读取exif数据后正确旋转我只上传空文件(正确命名)看起来不像na图像(从AWS下载我得到图像被破坏的错误消息)并且在检查之后它通常只有大约76b。是什么赋予了?这是否意味着脚本需要一些时间来处理调整大小/旋转信息,因此它上传的图像已经准备好了一半?我没有收到任何错误消息或警告。
我的本地文件上传脚本:
try{
$result = $s3->putObject([
'Bucket' => $config['s3']['bucket'],
'Key' => 'uploads/test.jpg',
'Body' => WWW_ROOT.'/penguin/xcropped/test.jpg',
'ACL' => 'public-read',
]);
} catch (S3Exception $e) {
echo $e->getMessage() . "\n";
}
$image_path = $result['ObjectURL'];
调整大小和裁剪脚本中的脚本:
require_once('inc/aws_connect.inc.php');
try{
$result = $s3->putObject([
'Bucket' => $config['s3']['bucket'],
'Key' => 'uploads/test2.jpg',
'Body' => WWW_ROOT.$thumb_path,
'ACL' => 'public-read',
]);
} catch (S3Exception $e) {
echo $e->getMessage() . "\n";
}
$aws_result = $result['ObjectURL'];
echo $aws_result;
有谁知道为什么会发生这种情况,可能会出现什么问题。图像大小约为1.7MB。这可能是个问题吗?
答案 0 :(得分:0)
为了使其正常工作,您需要使用Guzzle并将文件流式传输到AWS。这对我有用:
use GuzzleHttp\Psr7\Stream;
use GuzzleHttp\Psr7\CachingStream;
try{
$aws_result = $s3->putObject([
'Bucket' => $config['s3']['bucket'],
'Key' => 'thumbs/thumb_' . $random_string,
'Body' => new CachingStream(
new Stream(fopen(WWW_ROOT.$thumb_path, 'r'))
),
'ACL' => 'public-read',
'ContentType' => 'image/jpg',
]);
} catch (S3Exception $e) {
echo $e->getMessage() . "\n";
}
$aws_result = $aws_result['ObjectURL'];