Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

110
Vistas
¿Crear CFDirectory en S3?

Trabajando en un cargador simple que me pide que cargue en carpetas 'específicas del usuario', que deberían crearse la primera vez que un usuario carga algo. Todo el almacenamiento se realiza en S3. El código de prueba que tengo en este momento es este (mybucket.domain.name no es el depósito real, obviamente, cambié ese bit para esta publicación);

 <cfif DirectoryExists("s3://mybucket.domain.name/test123/")> <!--- The directory exists ---> <cfelse> <!--- Directory doesn't exist, so create it ---> <cfdirectory action="CREATE" directory="s3://mybucket.domain.name/test123/" storelocation="US"> </cfif>

Cuando ejecuto esto, no se devuelven errores, pero siempre informa que el directorio no existe y nunca lo crea. Revisé los documentos y las publicaciones anteriores aquí, y por lo que puedo decir, la sintaxis es correcta.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El problema principal aquí es que S3 no considera nada como una "carpeta". No hay un árbol de directorios en S3: son solo objetos, y algunos de esos objetos tienen caracteres / en sus nombres.

Hay un par de formas de evitar esto, pero ninguna le permite usar directoryExists().

La primera forma es evaluar si la matriz devuelta por directoryList('s3://mybucket/foldername') contiene algún miembro.

Otra forma es hacer todas sus operaciones S3 a través de un CFC. Aquí hay uno: https://github.com/joedanz/cf-amazon-s3

Si crea su propio componente que amplía ese, puede agregarle esta función que escribí para lograr lo mismo:

 <cffunction name="folderExists" access="public" returntype="boolean" hint="folderPath = path/to/folder/ (with trailing slash and no leading slash)"> <cfargument name="folderPath" type="string" /> <cfset var objArr = getBucket(bucketName=variables.bucket,prefix='#arguments.folderPath#',delimiter='/') /> <cfloop array="#objArr#" index="local.o"> <cfif o.key EQ arguments.folderPath AND o.size EQ 0> <cfreturn true /> </cfif> </cfloop> <cfreturn false /> </cffunction>

("folderPath" sería "/" si está buscando una "carpeta" en la raíz del depósito).

* otra edición: es posible que también desee esta función:

 <cffunction name="folderCreate" access="public" returntype="void"> <cfargument name="folderPath" type="string" default="" /> <cfargument name="bucket" type="string" default="#variables.bucket#" /> <cfif len(folderPath)> <cfif right(folderPath,1) NEQ "/"> <cfset folderPath &= "/" /> </cfif> <cfset putObject(bucketName=bucket,uri=variables.finderPath&URLEncodedFormat(folderPath),contentType='binary/octet-stream') /> </cfif> </cffunction>

Explicación: la mayoría de los clientes de S3 que he visto evitan la inexistencia de carpetas creando objetos de longitud cero e interpretándolos como carpetas.

over 4 years ago · Santiago Trujillo Denunciar

0

Si desea crear una "carpeta" en AWS S3 desde ColdFusion, debe crear un archivo de longitud 0 que tenga un "/" final al final de su nombre.

La forma en que lo hago es simple usando el soporte integrado:

 <cffile action = "write" file = "s3://yourS3bucket/folder_1/" output="">

Después de que esto se escriba en su depósito, AWS lo informará como un directorio y DirectoryExists funcionará con él (devolverá verdadero) o si coloca en DirectoryList su depósito como una consulta, este objeto será del tipo DIR. También puede usar DirectoryCopy (aunque "recurse" no funciona realmente como se espera con ningún subdirectorio en el directorio de origen). Nota: ahora tendrá un objeto en su depósito cuya clave es "folder_1/"

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda