2013-04-27 20 views
6

Ho passato le ultime ore seguendo le esercitazioni per implementare i caricamenti di file su Amazon S3 utilizzando php. Ho caricato la versione più recente della classe S3 di Donovan Schönknecht sul mio server (come S3.php) e sto cercando di usare il seguente codice per testare la capacità di upload. So che questo codice funzionerà perché ho visto numerosi esempi in azione.Utilizzo di PHP per caricare su Amazon S3

<?php 

require('S3.php'); 

$s3 = new S3('KEY', 'SECRET KEY'); 

//insert into s3 
$new_name = time() . '.txt'; 

S3::putObject(
'upload-me.txt', 
'bucketName', 
$new_name, 
S3::ACL_PUBLIC_READ, 
array(), 
array(), 
S3::STORAGE_CLASS_RRS 

); 

?> 

Errore di server 500 quando si tenta di caricare questa pagina. Inoltre, ogni altro rispettabile tutorial di questa natura mi ha dato lo stesso errore 500.

Ho verificato che la mia chiave e la chiave segreta sono valide connettendosi a S3 con Cyberduck.

Qualcuno ha idea di cosa potrei fare in modo errato?

Grazie,

Sean

+1

500 errore è probabilmente un errore nel tuo p codice hp. Attiva display_errors o controlla i tuoi registri per vedere il messaggio di errore. – datasage

risposta

8

Come risultato, mi mancava l'estensione cURL per PHP e questo stava causando un problema in quanto la classe S3 che stavo usando richiedeva l'uso di cURL. Tutto sta funzionando ora.

0

io non sono a conoscenza S3 API, ma l'ho usato come mezzo di immagazzinamento con https://github.com/KnpLabs/Gaufrette. Gaufrette è una libreria che fornisce uno strato di astrazione piuttosto bello sopra S3 e altri servizi/sistemi di file.

8

Si consiglia inoltre di utilizzare il AWS SDK for PHP ufficiale. Esempi per l'utilizzo di S3 con l'SDK possono essere trovati nel loro S3 user guide.

+0

L'SDK AWS ufficiale per PHP funziona solo con il compositore e non c'è più il download di file ZIP. Non posso usare il compositore su una piattaforma di hosting condiviso per alcuni dei miei siti web. – andrebruton

+6

C'è un file zip e phar incluso in [ogni versione] (https://github.com/aws/aws-sdk-php/releases) che include tutte le dipendenze di chiusura in modo che Composer non sia richiesto. –

+1

Il README e la guida utente dell'SDK [mostra dove scaricare il file zip] (http://docs.aws.amazon.com/aws-sdk-php/guide/latest/installation.html).C'è qualche ragione particolare per cui pensi che l'SDK abbia funzionato solo con Composer? –

0

Utilizzare questo per caricare le immagini utilizzando un modulo e va bene a lavorare per me si può provare a utilizzare con il vostro codice di

$name = $_FILES['photo']['name']; 
$size = $_FILES['photo']['size']; 
$tmp = $_FILES['photo']['tmp_name']; 

//////Upload Process 


    // Bucket Name 
    $bucket = 'bucket-name'; 
    require_once('S3.php'); 

    //AWS access info 
    $awsAccessKey = 'awsAccessKey'; 
    $awsSecretKey = 'awsSecretKey'; 

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

    $s3->putBucket($bucket, S3::ACL_PUBLIC_READ); 


    //Rename image name. 
    $actual_image_name = time(); 

     //Upload to S3 
    if($s3->putObjectFile($tmp, $bucket , $actual_image_name, S3::ACL_PUBLIC_READ)) 
    { 
     $image='http://'.$bucket.'.s3.amazonaws.com/'.$actual_image_name; 
    }else{ 
     echo 'error uploading to S3 Amazon'; 
    } 
0

Ecco il codice di esempio per caricare immagini su Amazon S3.

// Bucket Name 
$bucket="BucketName"; 
if (!class_exists('S3'))require_once('S3.php'); 

    //AWS access info 
    if (!defined('awsAccessKey')) define('awsAccessKey', 'ACCESS_KEY'); 
    if (!defined('awsSecretKey')) define('awsSecretKey', 'ACCESS_Secret_KEY'); 

    $s3 = new S3(awsAccessKey, awsSecretKey); 
    $s3->putBucket($bucket, S3::ACL_PUBLIC_READ); 
    if($s3->putObjectFile($tmp, $bucket , $image_name_actual,S3::ACL_PUBLIC_READ)) 
    { 
     $message = "S3 Upload Successful."; 
     $s3file='http://'.$bucket.'.s3.amazonaws.com/'.$actual_image_name; 
     echo "<img src='$s3file'/>"; 
     echo 'S3 File URL:'.$s3file; 
    } 
    else{ 
     $message = "S3 Upload Fail."; 
    } 
} 
4

È possibile scaricare la versione più recente di Amazon PHP SDK eseguendo seguente comando composer

composer require aws/aws-sdk-php 

ulteriori configurazioni caricare il file su Amazon S3 stanno seguendo

// Include the SDK using the Composer autoloader 
require 'vendor/autoload.php'; 
use Aws\S3\S3Client; 
use Aws\S3\Exception\S3Exception; 

// Set Amazon s3 credentials 
$client = S3Client::factory(
    array(
    'key' => "your-key", 
    'secret' => "your secret key" 
) 
); 

try { 
    $client->putObject(array(
    'Bucket'=>'your-bucket-name', 
    'Key' => 'your-filepath-in-bucket', 
    'SourceFile' => 'source-filename-with-path', 
    'StorageClass' => 'REDUCED_REDUNDANCY' 
)); 

} catch (S3Exception $e) { 
    // Catch an S3 specific exception. 
    echo $e->getMessage(); 
} 

passo Get dopo passo dettagli da qui Amazon S3 File Upload Using PHP