2014-09-05 2 views
0

У меня есть <input type="file"> с выбранным локальным файлом, который я бы хотел загрузить на сервер в виде файла, а не как Blob. Я хватаю его с помощью jQuery (элемент, а затем .files[0] или .prop('files')[0]).JavaScript - Файл является экземпляром файла, но `instanceof File` является ложным

По всем признакам, кроме одного, прототип этого объекта File:

Object.getPrototypeOf(file) // => File {slice: function} 
file.__proto__    // => File {slice: function} 
file.constructor   // => function File() { [native code] } 
file.constructor.prototype // => File {slice: function} 

И еще:

file instanceof File  // => false 
file instanceof Blob  // => true 

Что это дает?

+0

Разве это не наоборот? https://developer.mozilla.org/en/docs/Web/API/Blob «Интерфейс File основан на Blob, наследует функциональность blob и расширяет его для поддержки файлов в системе пользователя». – zerkms

+0

Да, файл наследуется от Blob, поэтому ожидается, что 'file instanceof Blob' будет true, так же, как вы ожидали бы, что' dog instanceof Animal' будет true. Но очень странно находить «file instanceof File» или «dog instanceof Dog» ложным. – Zach

+2

В каком браузере вы тестируете? Он работает как ожидается в Chrome. http://jsfiddle.net/drzfmgba/ –

ответ

0

Ответ был получен от комментария inf3rno - мой webapp перезаписывал переменную File.

0

я сталкиваюсь с подобной проблемой, я сохраняю File в OriginFile переменном, когда страница начинает оказывать, но file instanceof OriginFile все еще дает мне false. Но этот пример http://jsfiddle.net/drzfmgba/ невероятно работает в том же браузере (Mac Chrome 41).

В любом случае ... Я разрешаю его Object.prototype.toString.call(file) === '[object File]'.

Смежные вопросы