2012-01-10 3 views
1

У меня проблема с сервисом amazon s3 и веб-службой, вызываемой php. Этот WS получает от $ _POST файл base64encoded. Мне нужно взять эту «строку» и сохранить в ковше Amazon S3. Я не нашел правильного решения для этого, и после недели работы я ищу помощь здесь.

//$file = 'kdK9IWUAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd' 
$file = $_POST['some_file']; 
$opt = array(
     'fileUpload' => base64_decode($file), 
     'acl' => AmazonS3::ACL_PUBLIC 
    ); 
$s3 = new AmazonS3(AWS_KEY, AWS_SECRET_KEY); 
$response = $s3->create_object($bucket, $filename, $opt); 

Благодаря

ответ

1

Per the docs, fileUpload ожидает URL или путь, или fopen ресурс.

fileUpload - string|resource - Обязательно; Условный - URL/путь для загрузки файла или открытый ресурс. Требуется либо этот параметр, либо body.

Вы должны передавать декодированные данные файла через body параметра вместо:

body - string - Обязательный; Условные - данные, которые необходимо сохранить в объекте. Необходимо указать либо этот параметр, либо fileUpload.

+0

Thanks! Но мне нужно больше. Теперь я храню файл (иногда это изображение), но если я его открываю в браузере, он говорит мне, что файл поврежден. Любое предложение? – Matte

0

Imestring - это закодированная в base64 строка, переданная из данных POST. Вы можете закодировать это изображение и сделать файл в любом месте - в моем случае/фотографии. Я использовал это школьный сервер, но если сервер Amazon достаточно похож, он также может работать там.

$values = array(); 
    foreach($_POST as $k => $v){ 
     $values[$k] = $v; 
    } 
    $imagestring = $values['stringEncodedImage']; 

    $img = imagecreatefromstring(base64_decode($imagestring)); 
     if($img != false) 
     { 
      echo 'making the file!'; 
      imagejpeg($img, 'photos/'.$file_name); 
     }