Solución:
Antes de crear la URL firmada, debe verificar si el archivo existe directamente desde el depósito. Una forma de hacerlo es solicitando los metadatos HEAD.
// Using callbacks
s3.headObject(params, function (err, metadata) {
if (err && err.code === 'NotFound') {
// Handle no object on cloud here
} else {
s3.getSignedUrl('getObject', params, callback);
}
});
// Using async/await (untested)
try {
const headCode = await s3.headObject(params).promise();
const signedUrl = s3.getSignedUrl('getObject', params);
// Do something with signedUrl
} catch (headErr) {
if (headErr.code === 'NotFound') {
// Handle no object on cloud here
}
}
La solución más simple sin bloque try / catch.
const exists = await s3
.headObject({
Bucket: S3_BUCKET_NAME,
Key: s3Key,
})
.promise()
.then(
() => true,
err => {
if (err.code === 'NotFound') {
return false;
}
throw err;
}
);
mediante el uso headObject
método
AWS.config.update({
accessKeyId: "*****",
secretAccessKey: "****",
region: region,
version: "****"
});
const s3 = new AWS.S3();
const params = {
Bucket: s3BucketName,
Key: "filename" //if any sub folder-> path/of/the/folder.ext
}
try {
await s3.headObject(params).promise()
console.log("File Found in S3")
} catch (err) {
console.log("File not Found ERROR : " + err.code)
}
Como los parámetros son constantes, la mejor manera de usarlo con const
. Si el archivo no se encuentra en el s3 arroja el error NotFound : null
.
Si desea aplicar alguna operación en el depósito, debe cambiar los permisos de CORS Configuration
en el bucket respectivo en AWS. Para cambiar permisos Bucket->permission->CORS Configuration
y agregue este código.
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
para obtener más información sobre la configuración de CORS: https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)