2012-06-01 55 views
17

Estoy usando PHP y estoy usando la API S3 para cargar un archivo, pero quería asegurarme de que este nombre de archivo exacto no existiera en el segmento antes de subirlo.Ver si existe un objeto en S3 usando PHP

He encontrado algunos ejemplos en línea que usan "file_get_contents" pero ¿no significa que tendrías que descargar todo el archivo primero? Por lo general, estos archivos son de aproximadamente 10 mb, así que, idealmente, no me gustaría hacer esto.

¿Existe alguna forma de utilizar "file_get_contents" sin descargar el archivo?

O mejor aún, ¿quizás podría utilizar una solicitud de API para ver si el nombre de archivo existe?

No es importante para mí si el contenido o el tamaño del archivo es el mismo, solo el nombre del archivo.

Respuesta

28

Obtiene si el Amazon S3 especificada objeto existe en el cubo especificado.

AmazonS3 doesObjectExist

$s3 = new AmazonS3(); 
$bucket = 'my-bucket' . strtolower($s3->key); 

$response = $s3->doesObjectExist($bucket, 'test1.txt'); 

// Success? (Boolean, not a CFResponse object) 
var_dump($response); 
+3

Este enlace y el método son para la versión 1 del AWS SDK para PHP. La guía del usuario actualizada está aquí: http://docs.aws.amazon.com/aws-sdk-php/latest/index.html y la sección relevante para verificar la existencia de un archivo está utilizando el contenedor de flujo, que se encuentra aquí: http: //docs.aws.amazon.com/aws-sdk-php/guide/latest/feature-s3-stream-wrapper.html – David

+2

el enlace a los documentos actualizados, al método exacto es: http://docs.aws .amazon.com/aws-sdk-php/v2/api/class-Aws.S3.S3Client.html # _doesObjectExist –

+2

La función correcta que se debe utilizar es '$ s3-> doesObjectExist (...)' –

3

Si usted tiene o la posibilidad de instalar la extensión PECL HTTP entonces puede utilizar http_head para hacer una solicitud cabeza con facilidad y comprobar si la respuesta era 200 o 404.

5

Tenga en cuenta que las otras sugerencias se basan en la versión 1 de la AWS SDK para PHP. Para la versión 2, tendrá que estar familiarizado con la última guía encontrado aquí:

http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html

La sección "Getting Started" en el enlace anterior le ayudará a conseguir instalado el SDK y de configuración, así que asegúrese para tomarse su tiempo leyendo esos documentos si aún no lo ha hecho. Cuando haya terminado con la configuración, tendrá que estar familiarizado con el método de envoltura de secuencia encontrar aquí:

http://docs.aws.amazon.com/aws-sdk-php/guide/latest/feature-s3-stream-wrapper.html

Por último, a continuación es un breve ejemplo, en la vida real de cómo se podría utilizar en el flujo de tu código

require('vendor/autoload.php'); 

// your filename 
$filename = 'my_file_01.jpg'; 
// this will use AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY from env vars 
$s3 = Aws\S3\S3Client::factory(); 
// S3_BUCKET must also be defined in env vars 
$bucket = getenv('S3_BUCKET')?: die('No "S3_BUCKET" config var in found in env!'); 
// register stream wrapper method 
$s3->registerStreamWrapper(); 
// does file exist 
$keyExists = file_exists("s3://".$bucket."/".$filename); 
if ($keyExists) { 
    echo 'File exists!'; 
} 
7

tratar de utilizar código de abajo:

$s3 = new S3(); 

$info = $s3->getObjectInfo($bucket, $filename); 
if ($info) 
{ 
    echo 'File exists'; 
} 
else 
{ 
    echo 'File does not exists'; 
} 

descarga del SDK de Amazon S3 para php. Hay una clase llamada S3; crea un objeto de S3. El objeto permitirá llamar al método getObjectInfo(). Pase su nombre de cubo S3 y el nombre del archivo (a menudo el nombre del archivo se denomina clave). El método getObjectInfo() devolverá cierta información si el archivo existe; de ​​lo contrario, el método devolverá FALSE.

+0

Una pequeña explicación mejoraría mucho esta respuesta. Actualmente se encuentra en la cola de revisión de "baja calidad", probablemente porque se compone principalmente de código. – Blorgbeard

+0

Gracias por tu comentario. Acabo de explicar el código. –

+0

Esta debería ser la respuesta marcada. El más simple y el mejor. –

Cuestiones relacionadas