Pesquisa S3 para imagem usando JQuery

Se você estiver processando imagens e esperando que uma imagem apareça no S3, você pode usar o seguinte truque de javascript (hack) para esperar que a imagem realmente apareça lá.

INFORMAÇÃO: Não é um fato conhecido que os itens que são enviados para S3 nem sempre estão disponíveis imediatamente. Há uma latência entre quando você “coloca” um item em um balde S3 e quando pode “acessar” publicamente essa imagem (como em um navegador). Na maioria das vezes, é milissegundos, mas às vezes é mais longo. (Confie em nós, nós sabemos)

Independentemente de estar esperando sua própria imagem aparecer ou aguardando a conclusão de um trabalho do Blitline e não ter a capacidade de usar “postbacks” do Blitline, você pode usar o seguinte para esperar por uma imagem:

function waitForImage(img_id, src, callback) {
var imageSelector = "#" + img_id;
var tries = 10;

$
("body").find(imageSelector).remove();

setTimeout
( function() {
$
("body").append("<img style='display:none;' id='"+ img_id +"'/>");
var $img = $(imageSelector);
$img
.error(function() {
setTimeout
(function() {
tries
-= 1;
if (tries < 1) {
callback
(false);
}
waitForImage
(img_id, src, callback);
}, 5000);
});
$img
.load(function() {
callback
(true, src);
});
$img
.attr("src", src + "?"+Math.random().toString());
}, 1000);
}

Portanto, se você souber a localização da foto, basta ligar para o seguinte pelo seu javascript:

waitForImage("SomeUniqueID", "LocationOfPhotoOnS3",
function(success, src) {
if(success) {
alert
("My photo exists at " + src);
}else{
alert
("10 tries, no photo");
}
}
);

Se não for óbvio, “SomeUniqueID” é apenas um ID que não entrará em conflito com um elemento DOM existente e “LocationOfPhotoOnS3” é a localização da foto que você está procurando no S3.