AWS上传图像会导致上传空文件

时间:2017-12-07 10:36:22

标签: php image amazon-web-services file-upload

我正在尝试使用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。这可能是个问题吗?

1 个答案:

答案 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'];