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.