2012-10-07 18 views
7

pocas cosas que sé. Las carpetas no son un concepto de S3, son simplemente un objeto de cero bytes con nombres de clave que usan '/' como prefijos. Asumir que los llamemos carpetas y archivos por simplicidad haría que mi pregunta fuera más fácil de expresar.aws sdk php para listar carpetas s3

Es posible hacer un s3-> get_object_list (..) con prefijo = "root /" y obtener todos los archivos/carpetas. Mi problema es esto

Dada una lista de carpetas y subcarpetas para, p. Ej.

root/ 
root/folder1/ 
root/folder1/file1.txt 
root/folder2/ 
root/folder3/file2.txt 

¿Cómo puedo enumerar solo las carpetas. Esperaba evitar enumerar todos los archivos (incluso en respuesta no necesitan ser devueltos) pero get_object_list en php no es compatible con commonPrefixes ref: http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonS3/get_object_list aunque el doc dice que el código claramente no lo hace y usar el delimitador en realidad solo regresará archivos en la carpeta raíz (prefijo)

Me pregunto si alguien ha utilizado alguna técnica posterior a la respuesta o solicitud basada en tal situación.

Ya he probado todas las combinaciones de prefijo, delimitador y marcador que se me ocurrieron. No es tan bueno con PCRE, pero estoy seguro de que podría usarlo. Solo tengo carpetas profundas de un nivel, pero no sé cómo construir una para este caso. Como mis solicitudes no funcionaban, procedí a aceptar la respuesta con todos los archivos y carpetas y con suerte lo resolví en php ... o eso creí

He intentado en la respuesta posterior: dirname() - no use pierde algunas carpetas (vacías), seguro de que puedo eliminar duplicados en la matriz, pero existe el problema de la carpeta omitida pathinfo() - se comporta de la misma manera que dirname(), asume que todas las rutas terminan con nombre de archivo. glob - sin suerte, igual que el anterior.

Puesto que ya he perdido la mitad de un día en este Estoy esperando que alguien se ha ocupado de esto y le importaría compartir:

nota: no tengo ningún problema en hacer esto en Python y boto. Pero esto no es Python y tengo que hacer esto en PHP para este proyecto.

Respuesta

Cuestiones relacionadas