Pregunta

¿Hay alguna manera (preferiblemente usando JavaScript) para determinar si una URL es para un SWF o un JPG?

La respuesta obvia es olfatear el nombre de archivo para " .jpg " o " .swf " pero estoy tratando con pancartas que el servidor decide dinámicamente y que generalmente tienen muchos parámetros y generalmente no incluyen una extensión.

así que me pregunto si podría cargar el archivo primero y luego leerlo de alguna manera para determinar si es SWF o JPG, y luego colocarlo, porque el código JavaScript que necesitaría para mostrar un JPG frente a un SWF es muy diferente.

¡Gracias!

¿Fue útil?

Solución

Puede usar javascript para detectar si es una imagen creando una etiqueta img dinámica.

function isImage(url, callback) {
    var img = document.createElement('img');
    img.onload = function() {
        callback(url);
    }
    img.src = url;
}

Y luego llamarlo con:

isImage('http://animals.nationalgeographic.com/staticfiles/NGS/Shared/StaticFiles/animals/images/primary/bald-eagle-head.jpg', function(url) { alert(url + ' is a image'); });

Actualizar Esta versión siempre ejecutará la devolución de llamada con un valor booleano.

        function isImage(url) {
        var img = document.createElement('img');
        img.onload = function() {
            isImageCallback(url, true);
        }
        img.onerror = function() {
            isImageCallback(url, false);
        }
        img.src = url;
    }

    function isImageCallback(url, result) {
        if (result)
            alert(url + ' is an image');
        else
            alert(url + ' is not an image');
    }

Ponga su lógica en la función isImageCallback.

Otros consejos

Extendería la respuesta de Sijin diciendo:

Se puede utilizar una solicitud HTTP HEAD a la url para examinar el tipo mime del recurso. usted no necesitará descargar el resto del archivo de esa manera.

Completamente no probado, básicamente solo una idea:

function isImage(url)
{
    var http = getHTTPObject();
    http.onreadystatechange = function ()
    {
        if (http.readyState == 4)
        {
            var contentType = http.getResponseHeader("Content Type");
            if (contentType == "image/gif" || contentType == "image/jpeg")
                return true;
            else
                return false;
        }
    }

    http.open("HEAD",url,true);
    http.send(null);
}


function getHTTPObject() 
{
    if (window.XMLHttpRequest)
    {
        return new XMLHttpRequest();
    }
    else 
    {
        if (window.ActiveXObject)
        {
            return new ActiveXObject("Microsoft.XMLHTTP"); 
        }
    }
    return false;
}

No estoy seguro de la configuración exacta que tiene, pero ¿puede usar la respuesta HTTP y verificar el tipo MIME para determinar la imagen frente a flash?

Si la URL no tiene una extensión, no hay forma de saberlo sin solicitar el archivo al servidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top