Solución:
Los SDK no contienen un método conveniente para hacer esto. Sin embargo, cuando llamó a PutObject, usted proporcionó el depósito y la clave del objeto y eso es todo lo que necesita. Simplemente puede combinarlos para hacer la URL del objeto, por ejemplo:
- https://bucket.s3.amazonaws.com/key
Entonces, por ejemplo, si su balde es pablo
y la clave del objeto es dogs/toto.png
, usar:
- https://pablo.s3.amazonaws.com/dogs/toto.png
Tenga en cuenta que las teclas S3 no comienzan con un /
prefijo. Una clave es de la forma dogs/toto.png
, y no /dogs/toto.png
.
Para buckets específicos de una región, consulte Trabajo con buckets de Amazon S3 y estilos de URL de AWS S3. Reemplazar s3
con s3.<region>.amazonaws.com
o s3-<region>.amazonaws.com
en las URL anteriores, por ejemplo:
- https://seamus.s3.eu-west-1.amazonaws.com/dogs/setter.png (con punto)
- https://seamus.s3-eu-west-1.amazonaws.com/dogs/setter.png (con guión)
Si está utilizando IPv6, el formulario de URL general será:
- https://BUCKET.s3.dualstack.REGION.amazonaws.com
Para algunos depósitos, puede usar las URL de estilo de ruta más antiguas. Las URL de estilo de ruta están obsoletas y solo funcionan con depósitos creados el 30 de septiembre de 2020 o antes. Se usan así:
- https://s3.amazonaws.com/bucket/key
- https://s3.amazonaws.com/pablo/dogs/toto.png
- https://s3.eu-west-1.amazonaws.com/seamus/dogs/setter.png
- https://s3.dualstack.REGION.amazonaws.com/BUCKET
Actualmente, existen problemas de certificados TLS y SSL que pueden requerir algunos depósitos con puntos (.
) en su nombre para acceder a través de URL de estilo de ruta. AWS planea abordar esto. Vea el anuncio de AWS.
Nota: Orientación general sobre claves de objetos donde ciertos caracteres necesitan un manejo especial. Por ejemplo, el espacio se codifica en + (signo más) y el signo más se codifica en% 2B. También aquí.
en caso de que tenga los objetos s3bucket y filename y desee extraer la URL, aquí hay una opción:
function getUrlFromBucket(s3Bucket,fileName){
const {config :{params,region}} = s3Bucket;
const regionString = region.includes('us-east-1') ?'':('-' + region)
return `https://${params.Bucket}.s3${regionString}.amazonaws.com/${fileName}`
};
Puedes hacer otra llamada con esto:
var params = {Bucket: 'bucket', Key: 'key'};
s3.getSignedUrl('putObject', params, function (err, url) {
console.log('The URL is', url);
});