Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查变量是否保存文件或Blob_Javascript_Fileapi - Fatal编程技术网

Javascript 检查变量是否保存文件或Blob

Javascript 检查变量是否保存文件或Blob,javascript,fileapi,Javascript,Fileapi,Javascript的文件表示既有File又有Blob,两者几乎是一样的。有没有办法检查变量是否保存了文件或Blob类型的数据?W3.org: '文件对象是具有名称属性(即字符串)的Blob对象;' 如果是文件: var d = new Date(2013, 12, 5, 16, 23, 45, 600); var generatedFile = new File(["Rough Draft ...."], "Draft1.txt", {type: 'text/plain', lastModif

Javascript的文件表示既有
File
又有
Blob
,两者几乎是一样的。有没有办法检查变量是否保存了
文件或
Blob
类型的数据?

W3.org:

'文件对象是具有名称属性(即字符串)的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
如果是水滴:

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

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

在尝试确定对象是否为文件时,这对我很有用:

var reader = new FileReader();

if(file.type){
    reader.readAsDataURL(file);
}
如果我想检查它是否是像图像一样的特定文件类型,我会执行以下操作:

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

比较构造函数类:

var b = new Blob()
console.log(b.constructor === Blob) // true
最简单的方法:

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
根据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来说,这并不重要,因为您可能只使用文件输入标记,在这种情况下,您肯定会知道它是一个文件。

一行解决方案让生活更轻松

基于Ric天赋


if(x.name).
对于江湖郎中,
if(x.constructor==File)
对于pedantics.or.comapare构造函数的名称
x.constructor.name=='Blob'
如果可以是具有name属性的其他对象,我们可以对其他属性进行更详细的检查,这只是一个简单的例子。如果对象可以有大多数属性,但它仍然不是文件或Blob对象,我认为这是错误的方法,如果对象具有该属性,但该对象仍然可能不是Blob或File,它将返回true。为什么不这样测试呢
isFile instanceof File
const isFile = input => 'File' in window && input instanceof File;
const isBlob = input => 'Blob' in window && input instanceof Blob;

const a = new File([1,2,3], "foo.txt", {type: "text/plain"});
...

console.log(isFile(a)) // true
...