【问题标题】:AWS uploading image results in uploading empty fileAWS上传图片导致上传空文件
【发布时间】:2018-05-21 10:38:21
【问题描述】:

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

【问题讨论】:

  • S3 识别出什么样的mime-type?也许在裁剪后你会丢失这些信息
  • 它确实识别图像/jpg,并且我确实测试了我专门通过它的地方,我认为这可能与它可以直接从 $_FILES["files "]["tmp_name"],但不能轻易地从这里提到的服务器:stackoverflow.com/questions/34251296/…
  • 仔细检查您上传的文件内容是否正确。此外,从 S3 下载生成的文件并使用文本编辑器或二进制编辑器打开它。如您所说,如果它只有 76 个字节,那么这些字节是什么?他们是否会为您提供有关您的代码做错了什么的任何线索。

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


【解决方案1】:

为了使其正常工作,您需要使用 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'];

【讨论】:

    猜你喜欢
    • 2012-10-21
    • 2019-03-24
    • 2012-02-06
    • 1970-01-01
    • 2010-11-07
    • 2015-09-09
    • 2018-01-13
    • 2023-03-13
    • 2011-07-21
    相关资源
    最近更新 更多