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
fileExists
que 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 :)Image
objeto 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
return
declaració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
onload
yonerror
le indicarán si la imagen se cargó correctamente o si ocurrió un error:fuente
error
controlador.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
fetch
solució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 laok
propiedad delresponse
objeto 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 da200
yok
(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