从URL获取文件类型

时间:2016-07-31 00:17:43

标签: javascript

我需要从我的服务器上的网址图片中找出文件类型而不检查扩展程序,但我不知道如何在不将图像放入"输入的情况下如何做到这一点。像这样:

def f(arr:List[Int]) : List[Int] = {
    def odd_concat(list_odd:List[Int], arr_index:Int) : List[Int] = {
        if(arr_index == arr.size) {
            list_odd
        }
        else if(arr_index % 2 == 0) {
            odd_concat(list_odd, arr_index + 1)
        }
        else {
            //println(arr(arr_index))
            list_odd:+arr(arr_index)
            odd_concat(list_odd, arr_index + 1)
        }
    }
    odd_concat(List(), 0)
}

我理解" .type"仅适用于文件对象,因此如何将网址图像转换为像google徽标图片https://www.google.ca/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png这样的对象。 我需要使用ajax / flilereader吗?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:2)

accept属性值无效。应该使用逗号,而不是|MIME字符来管道change

您可以使用File事件来检查.type对象<input type="file" id="upload_file" accept="image/*,audio/*,video/*"/> <input type="submit" onclick="submit()"/> <script type="text/javascript"> var elem = document.getElementById("upload_file"); elem.onchange = function(e) { console.log(e.target.files[0].type) } function submit() { if (elem.files.length) { console.log(elem.files[0].type) } else { alert("no files selected") } } </script>

key, value

答案 1 :(得分:2)

使用XHR下载文件,然后使用var xhr = new XMLHttpRequest(); xhr.open('GET', '/path/to/image.png', true); xhr.responseType = 'blob'; xhr.onload = function(e) { //Here's the type console.log(xhr.response.type); }; xhr.send(); api确定mime类型:

SublimeText\Packages\User

答案 2 :(得分:2)

假设您的Content-Type HTTP标头准确无误,您可以通过创建HEAD请求来避免下载整个文件以检查类型。假设您还不需要整个文件,这可能会更快,特别是对于大文件。

工作示例:

var xhr = new XMLHttpRequest();
xhr.open('HEAD', 'https://crossorigin.me/http://placehold.it/350x150', true);

xhr.onload = function() {
    var contentType = xhr.getResponseHeader('Content-Type');
    console.log(contentType);
};

xhr.send();

或者,您可以通过在加载整个主体之前在AJAX请求对象上调用GET来获得与常规abort请求类似的结果(无论如何在任何最近的远程浏览器中)。

替代工作示例:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://crossorigin.me/http://placehold.it/350x150', true);

xhr.onreadystatechange = function() {
    // Wait for header to become available.
    var contentType = xhr.getResponseHeader('Content-Type');
    if (contentType) {
        // Stop downloading, the headers are all we need.
        xhr.abort();
        console.log(contentType);
    }
};

xhr.send();