web-dev-qa-db-ja.com

変数がファイルまたはBlobを保持しているかどうかを確認します

Javascriptには、ファイル表現用にFileBlobの両方があり、どちらもほとんど同じです。変数がFileまたはBlobタイプのデータを保持しているかどうかを確認する方法はありますか?

16
alexandernst

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';
12
Reflective

最も簡単な方法:

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
37
Nick Brunt

これは、オブジェクトがファイルであるかどうかを判別しようとするときに機能します。

var reader = new FileReader();

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

画像のような特定のファイルタイプかどうかを確認する場合は、次のようにします。

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

コンストラクタクラスを比較します。

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

ニック・ブラントに基づく:

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を使用しても問題はありません。その場合、ファイル入力タグしか使用できないため、ファイルであることは間違いありません。

1
Ric Flair

人生を楽にするワンライナーソリューション。

リックフレアに基づく

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
...
1
Ignacio Bustos