2017-12-07 3 views
0

PHP로 처리 한 후 이미지를 업로드하려고합니다. 이미 내 서버의 폴더에있는 이미지를 업로드하려고하면 이미지가 아무런 문제없이 업로드됩니다. 그러나 업로드 된 이미지를 처리하는 스크립트에 동일한 스크립트를 추가하면 (로컬로 이미지 저장, 자른 버전 생성 및 로컬 db에 대한 링크 업로드) 이미지의 크기를 조정하고 exif 데이터를 올바르게 읽은 후에는 빈 파일 (올바르게 명명 된) 만 업로드합니다. na 이미지 (AWS에서 다운로드 한 이미지가 손상되었다는 오류 메시지가 표시됨)처럼 보이지 않으며 검사 후 일반적으로 약 76b 밖에 없습니다. 뭐라 구요? 이는 스크립트가 크기 조정/회전 정보를 처리하는 데 약간의 시간이 필요하므로 반 준비가 된 이미지를 업로드한다는 의미입니까? 나는 어떤 오류 메시지 나 경고도받지 못한다. 로컬 파일 업로드AWS 이미지 업로드로 인해 빈 파일 업로드

내 스크립트 크기 조정 및 자르기 스크립트

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

어떤 종류의'''mime-type''이 S3에 의해 인식 되는가? 어쩌면 자르기 후에이 정보를 잃어 버릴 것입니다. –

+0

이미지/jpg를 인식하고, 특별히 통과 한 곳에서 테스트를 수행했습니다. $ _FILES [ "files"파일에서 곧바로 파일을 업로드 할 수 있다고 생각합니다. "] ["tmp_name "], 그러나 여기에서 언급 한 것처럼 서버에서 쉽게 할 수 없습니다 : https://stackoverflow.com/questions/34251296/cant-upload-image-to-s3-bucket-using-direct-url-of -image – happyrobot

+0

업로드중인 파일의 내용이 올바른지 다시 확인하십시오. 또한 S3에서 결과 파일을 다운로드하고 텍스트 편집기 또는 이진 편집기로 엽니 다. 당신이 주장하는대로 76 바이트 만 있다면, 그 바이트는 무엇입니까? 코드가 잘못 수행하는 것에 대한 단서를 제공합니다. – jarmod

답변

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']; 
관련 문제