Usando javascript, ¿hay alguna manera de saber si un recurso está disponible en el servidor? Por ejemplo, tengo imágenes 1.jpg - 5.jpg cargadas en la página html. Me gustaría llamar a una función de JavaScript cada minuto más o menos, que haría aproximadamente el siguiente código de borrador ...
if "../imgs/6.jpg" exists:
var nImg = document.createElement("img6");
nImg.src = "../imgs/6.jpg";
Pensamientos? ¡Gracias!
javascript
0xhughes
fuente
fuente

fileExistsque sería mejor nombre porque esta función no comprueba si la imagen existe en el servidor. Verifica si el archivo es accesible desde el servidor. No hay verificación si ese archivo es realmente una imagen. Podría ser .pdf, .html, algún archivo aleatorio renombrado a * .jpg o * .png. Si algo termina con .jpg no significa que sea 100% imagen :)Imageobjeto no sufre esa limitación. La única ventaja de esto es que en realidad no descargará la imagen.Puede usar la forma básica en que funcionan los precargadores de imágenes para probar si existe una imagen.
JSFiddle
fuente
returndeclaración como @ajtrichards tiene en la primera parte de su respuesta.Puede verificar si la imagen se carga o no utilizando los eventos integrados que se proporcionan para todas las imágenes.
Los eventos
onloadyonerrorle indicarán si la imagen se cargó correctamente o si ocurrió un error:fuente
errorcontrolador.Si alguien viene a esta página buscando hacer esto en un cliente basado en React , puede hacer algo como lo siguiente, que fue una respuesta original proporcionada por Sophia Alpert del equipo React aquí
fuente
Un enfoque mejor y moderno es usar ES6 Fetch API para verificar si una imagen existe o no:
Asegúrese de realizar las solicitudes del mismo origen o CORS está habilitado en el servidor.
fuente
Si crea una etiqueta de imagen y la agrega al DOM, su evento onload u onerror debería activarse. Si se activa un error, la imagen no existe en el servidor.
fuente
Puede llamar a esta función JS para verificar si el archivo existe en el Servidor:
fuente
Básicamente, una versión promisificada de @espascarello y @adeneo responde, con un parámetro alternativo:
Nota: Personalmente, me puede gustar más la
fetchsolución, pero tiene un inconveniente: si su servidor está configurado de una manera específica, puede devolver 200/304, incluso si su archivo no existe. Esto, por otro lado, hará el trabajo.fuente
fetch, puede usar laokpropiedad delresponseobjeto para verificar si la solicitud fue exitosa o no:fetch(url).then(res => {if(res.ok){ /*exist*/} else {/*not exist*/}});background-image: url('/a/broken/url')me da200yok(Chrome 74).Puede hacer esto con sus axios configurando la ruta relativa a la carpeta de imágenes correspondiente. He hecho esto para obtener un archivo json. Puede probar el mismo método para un archivo de imagen, puede consultar estos ejemplos
Si ya ha configurado una instancia de axios con baseurl como servidor en un dominio diferente, tendrá que usar la ruta completa del servidor de archivos estático donde implementa la aplicación web.
Si se encuentra la imagen, la respuesta será 200 y, de lo contrario, será 404.
Además, si el archivo de imagen está presente en la carpeta de activos dentro de src, puede hacer un requerimiento, obtener la ruta y hacer la llamada anterior con esa ruta.
fuente
Esto funciona bien:
fuente
Puede consultar este enlace para verificar si existe un archivo de imagen con JavaScript.
fuente