检查变量是否包含File或Blob

时间:2015-07-20 20:22:56

标签: javascript fileapi

Javascript同时具有FileBlob用于文件表示,两者几乎完全相同。有没有办法检查变量是否包含FileBlob类型的数据?

6 个答案:

答案 0 :(得分:20)

最简单的方法:

a = new File([1,2,3], "file.txt");
b = new Blob([1,2,3]);
c = "something else entirely";

a instanceof File
> true
b instanceof File
> false
c instanceof File
> false

答案 1 :(得分:11)

W3.org:

' File对象是一个带有name属性的Blob对象,它是一个字符串;'

如果是文件:

var d = new Date(2013, 12, 5, 16, 23, 45, 600);
var generatedFile = new File(["Rough Draft ...."], "Draft1.txt", {type: 'text/plain', lastModified: d});

console.log(typeof generatedFile.name == 'string'); // true

如果是Blob:

var blob = new Blob();
console.log(typeof blob.name); // undefined

条件:

var isFile = typeof FileOrBlob.name == 'string';

答案 2 :(得分:3)

一种衬套解决方案,使生活更轻松。

基于Ric Flair

.into_iter()

答案 3 :(得分:2)

比较构造函数类:

var b = new Blob()
console.log(b.constructor === Blob) // true

答案 4 :(得分:1)

当我尝试确定对象是文件时,这对我有用:

var reader = new FileReader();

if(file.type){
    reader.readAsDataURL(file);
}

如果我想检查它是否是像图像一样的特定文件类型,我会这样做:

if(file.type && file.type.indexOf('image') !== -1){
    reader.readAsDataURL(file);
}

答案 5 :(得分:1)

基于Nick Brunt的:

function isFile(input) {
   if ('File' in window && input instanceof File)
      return true;
   else return false;
}

function isBlob(input) {
    if ('Blob' in window && input instanceof Blob)
        return true;
    else return false;
}

//Test
const a = new File([1,2,3], "foo.txt", {type: "text/plain"});
const b = new Blob([1,2,3]);
const c = "something else entirely";

console.log(isFile(a));    //true
console.log(isBlob(a));    //true
console.log(isFile(b));    //false
console.log(isBlob(b));    //true
console.log(isFile(c));    //false
console.log(isBlob(c));    //false

不适用于Opera mini和IE。尽管使用IE没关系,因为您只能使用文件输入标签,在这种情况下,您肯定会知道它是一个文件。