Amazon S3 Загрузить PDF и создать обложку

У меня есть следующий фрагмент кода, который загружает PDF-файл в Amazon S3, мне нужно создать изображение с 1-й страницы PDF-файла и также загрузить его в s3.

//instantiate the class
$s3 = new S3(awsAccessKey, awsSecretKey);

//check whether a form was submitted
if($_SERVER['REQUEST_METHOD'] == "POST")
{
    //retreive post variables
    $fileName = $_FILES['file']['name'];
    $fileTempName = $_FILES['file']['tmp_name'];
    $fileSize = $_FILES['file']['size'];

    $extension=end(explode(".", $fileName));
    $rand = rand(1,100000000);
    $sha1 = sha1($rand);
    $md5 = md5($sha1);
    $fName = substr($md5, 0, 20);       
    $finalName = $fName.'.'.$extension;

    //create a new bucket
    $s3->putBucket("bucket", S3::ACL_PUBLIC_READ);

    //move the file
    if ($s3->putObjectFile($fileTempName, "bucket", 'publications/'.$finalName, S3::ACL_PUBLIC_READ)) {
        $s3file='http://bucket.s3.amazonaws.com/publications/'.$finalName;
        $aS3File = 'publications/'.$finalName;

        $im = new imagick($s3file[0]); 
        // convert to jpg 
        $im->setImageColorspace(255); 
        $im->setCompression(Imagick::COMPRESSION_JPEG); 
        $im->setCompressionQuality(75); 
        $im->setImageFormat('jpeg'); 
        //resize 
        $im->resizeImage(640, 877, imagick::FILTER_LANCZOS, 1);  
        //write image on server (line 54) 
        $s3->putObjectFile("","bucket", 'publications/'.$im->writeImage($fName.'.jpg'), S£::ACL_PUBLIC_READ);

    }else{
        echo "<strong>Something went wrong while uploading your file... sorry.</strong>";
    }

Я заменил свое фактическое имя ведра на «ведро» для безопасности, может ли кто-нибудь сказать мне, что я здесь делаю неправильно, поскольку я получаю следующую ошибку:

Неустранимая ошибка PHP: необработанное исключение «ImagickException» с сообщением «Невозможно прочитать файл: h» в /var/www/ams/pub-new-issue.php:45\nТрассировка стека:\n#0 /var/www/ ams/pub-new-issue.php(45): Imagick->__construct('h')\n#1 {main}\n добавляется в /var/www/ams/pub-new-issue.php в строке 45 ,

Благодарность


person Justin Erswell    schedule 23.05.2013    source источник


Ответы (1)


$s3file='http://bucket.s3.amazonaws.com/publications/'.$finalName;
$im = new imagick($s3file[0]); 

$s3file — это строка, но вы обращаетесь к индексу массива в ней. В результате вы получаете первый символ h. Используйте только $s3file в своем экземпляре Imagick, и все будет в порядке.

person ceejayoz    schedule 23.05.2013
comment
сделал, как вы сказали здесь, но получил следующую ошибку Неперехваченное исключение «ImagickException» с сообщением «невозможно открыть изображение `/var/www/ams/d4cf8f3e33c27055fcb3.jpg»: @ error/blob.c/OpenBlob/2587' в /var/www/ams/pub-new-issue.php:54\nТрассировка стека:\n#0 /var/www/ams/pub-new-issue.php(54): Imagick-›writeimage('d4cf8f3e33c2705. ..')\n#1 {main}\n добавлено в /var/www/ams/pub-new-issue.php в строке 54 - person Justin Erswell; 23.05.2013
comment
Существует ли /var/www/ams/d4cf8f3e33c27055fcb3.jpg? Доступен ли он пользователю веб-сервера? Откуда вообще идет этот путь? $s3file должно быть http://bucket.s3.amazonaws.com/publications/... согласно вашему коду. - person ceejayoz; 23.05.2013
comment
/var/www/ams — это корневая папка этого приложения, поэтому я предполагаю, что она доступна. Я только отбросил [0], как вы предложили, поэтому я не уверен, откуда он это взял? - person Justin Erswell; 23.05.2013
comment
Трудно сказать, так как вы удалили часть кода из примера, поэтому трудно понять, какая строка имеет номер 54. Это строка $im->writeImage($fName.'.jpg')? Если это так, ваш веб-сервер, вероятно, не имеет прав для записи изображения в это место. Возможно, вам следует записать во временный файл. - person ceejayoz; 23.05.2013
comment
строка 54: $s3-›putObjectFile(,bucket, 'publications/'.$im->writeImage($fName.'.jpg'), S£::ACL_PUBLIC_READ); - person Justin Erswell; 23.05.2013
comment
Итак, ваш веб-сервер не может сохранить объект Imagick в /var/www/ams. Попробуйте поместить его в /tmp или что-то в этом роде. - person ceejayoz; 23.05.2013
comment
Извините, но это мне не помогает, я не пытаюсь хранить это изображение локально, а сохраняю его в Amazon S3. Есть ли что-нибудь в этой оригинальной парадигме, что я могу сделать, чтобы решить эту проблему. - person Justin Erswell; 23.05.2013
comment
Ваш код $im->writeImage сохраняет изображение локально. Если вы не пытаетесь сохранить его локально, перестаньте пытаться хранить его локально. - person ceejayoz; 23.05.2013